From 17e02b8e2f3c601ef18698b61f704926f9e1b59a Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Thu, 5 Sep 2024 15:16:42 +0300 Subject: [PATCH] Update Coston2 contract configuration. Update contract abis. --- abi/FastUpdateIncentiveManager.json | 4 +- abi/FastUpdater.json | 75 +++++- abi/ProtocolMerkleStructs.json | 10 +- abi/Relay.json | 341 ++++++++++++++++++++----- abi/RewardManager.json | 125 +++++++-- abi/VoterRegistry.json | 20 +- libs/ftso-core/src/configs/networks.ts | 18 +- 7 files changed, 480 insertions(+), 113 deletions(-) diff --git a/abi/FastUpdateIncentiveManager.json b/abi/FastUpdateIncentiveManager.json index 35f47ed0..0b8b1476 100644 --- a/abi/FastUpdateIncentiveManager.json +++ b/abi/FastUpdateIncentiveManager.json @@ -876,8 +876,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e2938038062003e29833981016040819052620000349162000a54565b898989808084848d8d8b8a806200004b81620000fb565b506200005a848484846200017c565b505050506200007082826200029c60201b60201c565b506200009c9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b48685846200041160201b60201c565b620000c084886200054d565b620000cb85620005d3565b620000d68462000631565b620000e1826200068f565b620000eb620006ed565b5050505050505050505062000b3d565b60008111620001775760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001878462000709565b620001928362000767565b828411620001ef5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200016e565b60006066620001ff8587620007b7565b901c11620002765760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d32352900000000000000000060648201526084016200016e565b6200028182620007dd565b6200028c81620000fb565b620002966200083b565b50505050565b600754600160a01b900460ff1615620002f85760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200016e565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200016e565b6001600160a01b0381166200039b5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200016e565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b81831115620004895760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e2074686560448201527f2072616e676520696e637265617365206c696d6974000000000000000000000060648201526084016200016e565b620004ae6000620004aa83620004a3620f42408862000b04565b0260781c90565b1190565b620005485760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a4016200016e565b505050565b818111620005cf5760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a4016200016e565b5050565b620005de8162000984565b6200062c5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200016e565b601555565b6200063c8162000984565b6200068a5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c61726765000060448201526064016200016e565b601655565b6200069a8162000984565b620006e85760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200016e565b601755565b62000704620006fb6200099a565b6001607f1b0190565b601855565b620007148162000984565b620007625760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200016e565b600455565b620007728162000984565b620007b25760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200016e565b600555565b6000607f83901b8282818381620007d257620007d262000aee565b049695505050505050565b620007e88162000984565b620008365760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c617267650000000060448201526064016200016e565b600655565b6200084960016000620009b7565b6200085760026000620009b7565b6200086560036000620009b7565b6000546001600160401b0381111562000882576200088262000b27565b604051908082528060200260200182016040528015620008ac578160200160208202803683370190505b508051620008c391600191602090910190620009d7565b506000546001600160401b03811115620008e157620008e162000b27565b6040519080825280602002602001820160405280156200090b578160200160208202803683370190505b5080516200092291600291602090910190620009d7565b506000546001600160401b0381111562000940576200094062000b27565b6040519080825280602002602001820160405280156200096a578160200160208202803683370190505b5080516200098191600391602090910190620009d7565b50565b60006200099482600160801b1190565b92915050565b6000620009b2600554600454620007b760201b60201c565b905090565b508054600082559060005260206000209081019062000981919062000a27565b82805482825590600052602060002090810192821562000a15579160200282015b8281111562000a15578251825591602001919060010190620009f8565b5062000a2392915062000a27565b5090565b5b8082111562000a23576000815560010162000a28565b6001600160a01b03811681146200098157600080fd5b6000806000806000806000806000806101408b8d03121562000a7557600080fd5b8a5162000a828162000a3e565b60208c0151909a5062000a958162000a3e565b60408c015190995062000aa88162000a3e565b8098505060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b634e487b7160e01b600052601260045260246000fd5b60008262000b2257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6132dc8062000b4d6000396000f3fe6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612a38565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612a51565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b66109f3565b3480156103d657600080fd5b506102746103e5366004612a63565b610a93565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612a63565b610d21565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612a63565b610e02565b6040516102ca929190612add565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612afe565b610ea7565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612a38565b610f15565b3480156104fa57600080fd5b50610274610509366004612b5d565b610f8c565b34801561051a57600080fd5b506102e9610ff1565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9610ffb565b34801561056f57600080fd5b5061027461057e366004612cbc565b611005565b34801561058f57600080fd5b506102e96110e0565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612d74565b6110f6565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612a38565b611181565b3480156106ac57600080fd5b506102746111d9565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612d91565b61122f565b3480156106ff57600080fd5b50610274611395565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612dca565b34801561076057600080fd5b5061027461076f366004612a38565b61145b565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c611493565b6107a46114fb565b34600b546107b29190612df3565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f4611546565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b156108585761082561158d565b600061083c60055461083760026115c5565b900390565b905061084b8160165484611607565b6108548261172e565b5050565b610863600036611788565b50565b61086e611493565b600080600061087c846118d8565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e06565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a2336108fc6109be8634612e23565b6040518115909202916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b5050505050610863611546565b600754600090600160a81b900460ff16610a1757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612e36565b905090565b610a9c336110f6565b610add5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610b475760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b8054421015610b985760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ad4565b6000816001018054610ba990612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590612e53565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610c546001830182612980565b50506007805460ff60b01b1916600160b01b1790556040516000903090610c7c908490612e87565b6000604051808303816000865af19150503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d1b81611af6565b50505050565b610d29611b13565b6001600160e01b031981166000908152600960205260408120549003610d915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610dfd6001830182612980565b505050565b60096020526000908152604090208054600182018054919291610e2490612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5090612e53565b8015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610ec95750600754600160a81b900460ff16155b15610f0a57610ed661158d565b610ee583601654601754611607565b610ef160165485611b6d565b610efd84848484611bed565b610f05611cf7565b610d1b565b610d1b600036611788565b600754600160b01b900460ff1680610f375750600754600160a81b900460ff16155b1561085857610f4461158d565b6000610f5660055461083760026115c5565b9050610f658183601754611607565b6000610f776004546108376001611d07565b9050610f838382611b6d565b610dfd83611d34565b6010546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610ad4565b610dfd838383611d8e565b6000610a8e611f6b565b6000610a8e611f7b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461107e5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ad4565b6110d66110b283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611f8d565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610854828261206a565b6000610a8e6110ed611f6b565b6001607f1b0190565b600754600090600160a01b900460ff16801561117b5750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190612ea3565b92915050565b6111896114fb565b600e819055600a5461119c908290612df3565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112275760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610ad4565b6107f4612182565b600754600160a01b900460ff16156112805760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ad4565b6001600160a01b0382166112d65760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ad4565b6001600160a01b03811661131f5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ad4565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61139d611b13565b600754600160a81b900460ff16156113f75760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ad4565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff168061147d5750600754600160a81b900460ff16155b156108585761148a61158d565b6108638161225b565b60003461149e611f7b565b6114a89190612df3565b905047818111156114eb5761dead6108fc6114c38484612e23565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b8181101561085457610854612ec5565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610ad4565b61154e611f7b565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610ad4565b600754600160b01b900460ff16156115bd573330146115ae576115ae612ec5565b6007805460ff60b01b19169055565b6107f4611b13565b6000805b8254811015611601576115f7828483815481106115e8576115e8612edb565b90600052602060002001540190565b91506001016115c9565b50919050565b818311156116755760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610ad4565b61169660006116928361168b620f424088612f07565b0260781c90565b1190565b610dfd5760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610ad4565b611737816122b5565b6117835760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610ad4565b601755565b611790611b13565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190612f1b565b905060006118128242612df3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118909082612f82565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516118c99493929190613041565b60405180910390a15050505050565b600080803460781c1561193e5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610ad4565b61194884356122b5565b6119945760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610ad4565b60055434935084359250820160208501358111156119ed578460200135905060006119c0826005541190565b6119ce5760055482036119d1565b60005b90506119e86119e082866122c4565b860260801c90565b945092505b601654811115611a2e5760165490506000611a09826005541190565b611a17576005548203611a1a565b60005b9050611a296119e082866122c4565b945092505b6000611a3e601754850260781c90565b905084811115611aac5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610ad4565b611ab5846122e7565b808503858214611aec57611ac88161238b565b611ae1611ad7826006546122c4565b6015540260801c90565b9350611aec8461241d565b5050509193909250565b3d604051818101604052816000823e8215611b0f578181f35b8181fd5b611b1b6109f3565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ad4565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610ad4565b611bf6846124a7565b611bff836124f9565b828411611c5a5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610ad4565b60006066611c688587612545565b901c11611cdd5760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610ad4565b611ce68261255d565b611cef816125b7565b610d1b612632565b611d026110ed611f6b565b601855565b6000805b825481101561160157611d2a828483815481106115e8576115e8612edb565b9150600101611d0b565b611d3d816122b5565b611d895760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610ad4565b601655565b6000611d9b826002613087565b611da590846130b2565b6001600160401b031690506000611dde62015180600d54611dc69190612df3565b611dd085876130b2565b6001600160401b0316612760565b90506000611e106001600160401b038516611df98585612e23565b601454600b54611e099190612e23565b9190612776565b90506000611e1f8760016130d9565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e9e91908101906130f5565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611ed79291906131e9565b60405180910390a28260146000828254611ef19190612df3565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b50505050505050505050505050565b6000610a8e600554600454612545565b6000601454600b54610a8e9190612e23565b60008082604051602001611fa19190612dca565b6040516020818303038152906040528051906020012090506000805b865181101561201957868181518110611fd857611fd8612edb565b6020026020010151830361200757858181518110611ff857611ff8612edb565b60200260200101519150612019565b8061201181613262565b915050611fbd565b506001600160a01b03811661205f5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ad4565b9150505b9392505050565b612074828261289c565b6120a282826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611f8d565b601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506120f882826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611f8d565b601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061215e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611f8d565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b6121b26006546003612192612900565b815481106121a2576121a2612edb565b9060005260206000200154900390565b6006556005546121c6906002612192612900565b6005556004546121da906001612192612900565b600455600060016121e9612900565b815481106121f9576121f9612edb565b906000526020600020018190555060006002612213612900565b8154811061222357612223612edb565b90600052602060002001819055506000600361223d612900565b8154811061224d5761224d612edb565b600091825260209091200155565b612264816122b5565b6122b05760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610ad4565b601555565b600061117b82600160801b1190565b6000608083901b82828183816122dc576122dc612ef1565b049695505050505050565b61231460026122f461290c565b8154811061230457612304612edb565b9060005260206000200154820190565b600261231e61290c565b8154811061232e5761232e612edb565b6000918252602090912001556005548101600581905561234d906122b5565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b61239860036122f461290c565b60036123a261290c565b815481106123b2576123b2612edb565b600091825260209091200155600654810160068190556123d1906122b5565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b61242a60016122f461290c565b600161243461290c565b8154811061244457612444612edb565b60009182526020909120015560045481016004819055612463906122b5565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b6124b0816122b5565b6124f45760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b600455565b612502816122b5565b6125405760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b600555565b6000607f83901b82828183816122dc576122dc612ef1565b612566816122b5565b6125b25760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b600655565b6000811161262d5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610ad4565b600055565b61263e600160006129ba565b61264a600260006129ba565b612656600360006129ba565b6000546001600160401b0381111561267057612670612ba2565b604051908082528060200260200182016040528015612699578160200160208202803683370190505b5080516126ae916001916020909101906129d8565b506000546001600160401b038111156126c9576126c9612ba2565b6040519080825280602002602001820160405280156126f2578160200160208202803683370190505b508051612707916002916020909101906129d8565b506000546001600160401b0381111561272257612722612ba2565b60405190808252806020026020018201604052801561274b578160200160208202803683370190505b508051610863916003916020909101906129d8565b600081831161276f5781612063565b5090919050565b60008082116127ba5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ad4565b836000036127ca57506000612063565b838302838582816127dd576127dd612ef1565b04036127fb578281816127f2576127f2612ef1565b04915050612063565b5060006128088386612f07565b90506000612816848761327b565b905060006128248587612f07565b90506000612832868861327b565b90508561283f828561328f565b6128499190612f07565b612853838561328f565b61285d838761328f565b88612868868961328f565b612872919061328f565b61287c9190612df3565b6128869190612df3565b6128909190612df3565b98975050505050505050565b6128a68282612918565b6128dc828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611f8d565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610a8e6001612968565b6000610a8e6000612968565b61294482826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611f8d565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129764384612df3565b61117b919061327b565b50805461298c90612e53565b6000825580601f1061299c575050565b601f0160209004906000526020600020908101906108639190612a23565b50805460008255906000526020600020908101906108639190612a23565b828054828255906000526020600020908101928215612a13579160200282015b82811115612a135782518255916020019190600101906129f8565b50612a1f929150612a23565b5090565b5b80821115612a1f5760008155600101612a24565b600060208284031215612a4a57600080fd5b5035919050565b60006040828403121561160157600080fd5b600060208284031215612a7557600080fd5b81356001600160e01b03198116811461206357600080fd5b60005b83811015612aa8578181015183820152602001612a90565b50506000910152565b60008151808452612ac9816020860160208601612a8d565b601f01601f19169290920160200192915050565b828152604060208201526000612af66040830184612ab1565b949350505050565b60008060008060808587031215612b1457600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612b5857600080fd5b919050565b600080600060608486031215612b7257600080fd5b8335612b7d81612b30565b9250612b8b60208501612b41565b9150612b9960408501612b41565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612bda57612bda612ba2565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c0857612c08612ba2565b604052919050565b60006001600160401b03821115612c2957612c29612ba2565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612c5957600080fd5b81356020612c6e612c6983612c10565b612be0565b82815260059290921b84018101918181019086841115612c8d57600080fd5b8286015b84811015612cb1578035612ca481612c33565b8352918301918301612c91565b509695505050505050565b60008060408385031215612ccf57600080fd5b82356001600160401b0380821115612ce657600080fd5b818501915085601f830112612cfa57600080fd5b81356020612d0a612c6983612c10565b82815260059290921b84018101918181019089841115612d2957600080fd5b948201945b83861015612d4757853582529482019490820190612d2e565b96505086013592505080821115612d5d57600080fd5b50612d6a85828601612c48565b9150509250929050565b600060208284031215612d8657600080fd5b813561206381612c33565b60008060408385031215612da457600080fd5b8235612daf81612c33565b91506020830135612dbf81612c33565b809150509250929050565b6020815260006120636020830184612ab1565b634e487b7160e01b600052601160045260246000fd5b8082018082111561117b5761117b612ddd565b600060208284031215612e1857600080fd5b815161206381612b30565b8181038181111561117b5761117b612ddd565b600060208284031215612e4857600080fd5b815161206381612c33565b600181811c90821680612e6757607f821691505b60208210810361160157634e487b7160e01b600052602260045260246000fd5b60008251612e99818460208701612a8d565b9190910192915050565b600060208284031215612eb557600080fd5b8151801515811461206357600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f1657612f16612ef1565b500490565b600060208284031215612f2d57600080fd5b5051919050565b601f821115610dfd57600081815260208120601f850160051c81016020861015612f5b5750805b601f850160051c820191505b81811015612f7a57828155600101612f67565b505050505050565b81516001600160401b03811115612f9b57612f9b612ba2565b612faf81612fa98454612e53565b84612f34565b602080601f831160018114612fe45760008415612fcc5750858301515b600019600386901b1c1916600185901b178555612f7a565b600085815260208120601f198616915b8281101561301357888601518255948401946001909101908401612ff4565b50858210156130315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b038181168382160280821691908281146130aa576130aa612ddd565b505092915050565b6001600160401b038281168282160390808211156130d2576130d2612ddd565b5092915050565b62ffffff8181168382160190808211156130d2576130d2612ddd565b6000602080838503121561310857600080fd5b82516001600160401b0381111561311e57600080fd5b8301601f8101851361312f57600080fd5b805161313d612c6982612c10565b8181526060918202830184019184820191908884111561315c57600080fd5b938501935b838510156131dd5780858a0312156131795760008081fd5b613181612bb8565b85516affffffffffffffffffffff198116811461319e5760008081fd5b81528587015163ffffffff811681146131b75760008081fd5b818801526040868101516131ca81612b30565b9082015283529384019391850191613161565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561324e57815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613208565b505095909501959095525092949350505050565b60006001820161327457613274612ddd565b5060010190565b60008261328a5761328a612ef1565b500690565b808202811582820484141761117b5761117b612ddd56fea264697066735822122026b1ad371c79d9151c39dcfe3beb7c10ad2592c237d2b2cdf13f4d19fd1535a264736f6c63430008140033", - "deployedBytecode": "0x6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612a38565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612a51565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b66109f3565b3480156103d657600080fd5b506102746103e5366004612a63565b610a93565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612a63565b610d21565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612a63565b610e02565b6040516102ca929190612add565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612afe565b610ea7565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612a38565b610f15565b3480156104fa57600080fd5b50610274610509366004612b5d565b610f8c565b34801561051a57600080fd5b506102e9610ff1565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9610ffb565b34801561056f57600080fd5b5061027461057e366004612cbc565b611005565b34801561058f57600080fd5b506102e96110e0565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612d74565b6110f6565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612a38565b611181565b3480156106ac57600080fd5b506102746111d9565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612d91565b61122f565b3480156106ff57600080fd5b50610274611395565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612dca565b34801561076057600080fd5b5061027461076f366004612a38565b61145b565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c611493565b6107a46114fb565b34600b546107b29190612df3565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f4611546565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b156108585761082561158d565b600061083c60055461083760026115c5565b900390565b905061084b8160165484611607565b6108548261172e565b5050565b610863600036611788565b50565b61086e611493565b600080600061087c846118d8565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e06565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a2336108fc6109be8634612e23565b6040518115909202916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b5050505050610863611546565b600754600090600160a81b900460ff16610a1757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612e36565b905090565b610a9c336110f6565b610add5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610b475760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b8054421015610b985760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ad4565b6000816001018054610ba990612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590612e53565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610c546001830182612980565b50506007805460ff60b01b1916600160b01b1790556040516000903090610c7c908490612e87565b6000604051808303816000865af19150503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d1b81611af6565b50505050565b610d29611b13565b6001600160e01b031981166000908152600960205260408120549003610d915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610dfd6001830182612980565b505050565b60096020526000908152604090208054600182018054919291610e2490612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5090612e53565b8015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610ec95750600754600160a81b900460ff16155b15610f0a57610ed661158d565b610ee583601654601754611607565b610ef160165485611b6d565b610efd84848484611bed565b610f05611cf7565b610d1b565b610d1b600036611788565b600754600160b01b900460ff1680610f375750600754600160a81b900460ff16155b1561085857610f4461158d565b6000610f5660055461083760026115c5565b9050610f658183601754611607565b6000610f776004546108376001611d07565b9050610f838382611b6d565b610dfd83611d34565b6010546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610ad4565b610dfd838383611d8e565b6000610a8e611f6b565b6000610a8e611f7b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461107e5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ad4565b6110d66110b283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611f8d565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610854828261206a565b6000610a8e6110ed611f6b565b6001607f1b0190565b600754600090600160a01b900460ff16801561117b5750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190612ea3565b92915050565b6111896114fb565b600e819055600a5461119c908290612df3565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112275760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610ad4565b6107f4612182565b600754600160a01b900460ff16156112805760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ad4565b6001600160a01b0382166112d65760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ad4565b6001600160a01b03811661131f5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ad4565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61139d611b13565b600754600160a81b900460ff16156113f75760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ad4565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff168061147d5750600754600160a81b900460ff16155b156108585761148a61158d565b6108638161225b565b60003461149e611f7b565b6114a89190612df3565b905047818111156114eb5761dead6108fc6114c38484612e23565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b8181101561085457610854612ec5565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610ad4565b61154e611f7b565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610ad4565b600754600160b01b900460ff16156115bd573330146115ae576115ae612ec5565b6007805460ff60b01b19169055565b6107f4611b13565b6000805b8254811015611601576115f7828483815481106115e8576115e8612edb565b90600052602060002001540190565b91506001016115c9565b50919050565b818311156116755760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610ad4565b61169660006116928361168b620f424088612f07565b0260781c90565b1190565b610dfd5760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610ad4565b611737816122b5565b6117835760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610ad4565b601755565b611790611b13565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190612f1b565b905060006118128242612df3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118909082612f82565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516118c99493929190613041565b60405180910390a15050505050565b600080803460781c1561193e5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610ad4565b61194884356122b5565b6119945760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610ad4565b60055434935084359250820160208501358111156119ed578460200135905060006119c0826005541190565b6119ce5760055482036119d1565b60005b90506119e86119e082866122c4565b860260801c90565b945092505b601654811115611a2e5760165490506000611a09826005541190565b611a17576005548203611a1a565b60005b9050611a296119e082866122c4565b945092505b6000611a3e601754850260781c90565b905084811115611aac5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610ad4565b611ab5846122e7565b808503858214611aec57611ac88161238b565b611ae1611ad7826006546122c4565b6015540260801c90565b9350611aec8461241d565b5050509193909250565b3d604051818101604052816000823e8215611b0f578181f35b8181fd5b611b1b6109f3565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ad4565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610ad4565b611bf6846124a7565b611bff836124f9565b828411611c5a5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610ad4565b60006066611c688587612545565b901c11611cdd5760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610ad4565b611ce68261255d565b611cef816125b7565b610d1b612632565b611d026110ed611f6b565b601855565b6000805b825481101561160157611d2a828483815481106115e8576115e8612edb565b9150600101611d0b565b611d3d816122b5565b611d895760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610ad4565b601655565b6000611d9b826002613087565b611da590846130b2565b6001600160401b031690506000611dde62015180600d54611dc69190612df3565b611dd085876130b2565b6001600160401b0316612760565b90506000611e106001600160401b038516611df98585612e23565b601454600b54611e099190612e23565b9190612776565b90506000611e1f8760016130d9565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e9e91908101906130f5565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611ed79291906131e9565b60405180910390a28260146000828254611ef19190612df3565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b50505050505050505050505050565b6000610a8e600554600454612545565b6000601454600b54610a8e9190612e23565b60008082604051602001611fa19190612dca565b6040516020818303038152906040528051906020012090506000805b865181101561201957868181518110611fd857611fd8612edb565b6020026020010151830361200757858181518110611ff857611ff8612edb565b60200260200101519150612019565b8061201181613262565b915050611fbd565b506001600160a01b03811661205f5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ad4565b9150505b9392505050565b612074828261289c565b6120a282826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611f8d565b601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506120f882826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611f8d565b601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061215e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611f8d565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b6121b26006546003612192612900565b815481106121a2576121a2612edb565b9060005260206000200154900390565b6006556005546121c6906002612192612900565b6005556004546121da906001612192612900565b600455600060016121e9612900565b815481106121f9576121f9612edb565b906000526020600020018190555060006002612213612900565b8154811061222357612223612edb565b90600052602060002001819055506000600361223d612900565b8154811061224d5761224d612edb565b600091825260209091200155565b612264816122b5565b6122b05760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610ad4565b601555565b600061117b82600160801b1190565b6000608083901b82828183816122dc576122dc612ef1565b049695505050505050565b61231460026122f461290c565b8154811061230457612304612edb565b9060005260206000200154820190565b600261231e61290c565b8154811061232e5761232e612edb565b6000918252602090912001556005548101600581905561234d906122b5565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b61239860036122f461290c565b60036123a261290c565b815481106123b2576123b2612edb565b600091825260209091200155600654810160068190556123d1906122b5565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b61242a60016122f461290c565b600161243461290c565b8154811061244457612444612edb565b60009182526020909120015560045481016004819055612463906122b5565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b6124b0816122b5565b6124f45760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b600455565b612502816122b5565b6125405760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b600555565b6000607f83901b82828183816122dc576122dc612ef1565b612566816122b5565b6125b25760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b600655565b6000811161262d5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610ad4565b600055565b61263e600160006129ba565b61264a600260006129ba565b612656600360006129ba565b6000546001600160401b0381111561267057612670612ba2565b604051908082528060200260200182016040528015612699578160200160208202803683370190505b5080516126ae916001916020909101906129d8565b506000546001600160401b038111156126c9576126c9612ba2565b6040519080825280602002602001820160405280156126f2578160200160208202803683370190505b508051612707916002916020909101906129d8565b506000546001600160401b0381111561272257612722612ba2565b60405190808252806020026020018201604052801561274b578160200160208202803683370190505b508051610863916003916020909101906129d8565b600081831161276f5781612063565b5090919050565b60008082116127ba5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ad4565b836000036127ca57506000612063565b838302838582816127dd576127dd612ef1565b04036127fb578281816127f2576127f2612ef1565b04915050612063565b5060006128088386612f07565b90506000612816848761327b565b905060006128248587612f07565b90506000612832868861327b565b90508561283f828561328f565b6128499190612f07565b612853838561328f565b61285d838761328f565b88612868868961328f565b612872919061328f565b61287c9190612df3565b6128869190612df3565b6128909190612df3565b98975050505050505050565b6128a68282612918565b6128dc828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611f8d565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610a8e6001612968565b6000610a8e6000612968565b61294482826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611f8d565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129764384612df3565b61117b919061327b565b50805461298c90612e53565b6000825580601f1061299c575050565b601f0160209004906000526020600020908101906108639190612a23565b50805460008255906000526020600020908101906108639190612a23565b828054828255906000526020600020908101928215612a13579160200282015b82811115612a135782518255916020019190600101906129f8565b50612a1f929150612a23565b5090565b5b80821115612a1f5760008155600101612a24565b600060208284031215612a4a57600080fd5b5035919050565b60006040828403121561160157600080fd5b600060208284031215612a7557600080fd5b81356001600160e01b03198116811461206357600080fd5b60005b83811015612aa8578181015183820152602001612a90565b50506000910152565b60008151808452612ac9816020860160208601612a8d565b601f01601f19169290920160200192915050565b828152604060208201526000612af66040830184612ab1565b949350505050565b60008060008060808587031215612b1457600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612b5857600080fd5b919050565b600080600060608486031215612b7257600080fd5b8335612b7d81612b30565b9250612b8b60208501612b41565b9150612b9960408501612b41565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612bda57612bda612ba2565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c0857612c08612ba2565b604052919050565b60006001600160401b03821115612c2957612c29612ba2565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612c5957600080fd5b81356020612c6e612c6983612c10565b612be0565b82815260059290921b84018101918181019086841115612c8d57600080fd5b8286015b84811015612cb1578035612ca481612c33565b8352918301918301612c91565b509695505050505050565b60008060408385031215612ccf57600080fd5b82356001600160401b0380821115612ce657600080fd5b818501915085601f830112612cfa57600080fd5b81356020612d0a612c6983612c10565b82815260059290921b84018101918181019089841115612d2957600080fd5b948201945b83861015612d4757853582529482019490820190612d2e565b96505086013592505080821115612d5d57600080fd5b50612d6a85828601612c48565b9150509250929050565b600060208284031215612d8657600080fd5b813561206381612c33565b60008060408385031215612da457600080fd5b8235612daf81612c33565b91506020830135612dbf81612c33565b809150509250929050565b6020815260006120636020830184612ab1565b634e487b7160e01b600052601160045260246000fd5b8082018082111561117b5761117b612ddd565b600060208284031215612e1857600080fd5b815161206381612b30565b8181038181111561117b5761117b612ddd565b600060208284031215612e4857600080fd5b815161206381612c33565b600181811c90821680612e6757607f821691505b60208210810361160157634e487b7160e01b600052602260045260246000fd5b60008251612e99818460208701612a8d565b9190910192915050565b600060208284031215612eb557600080fd5b8151801515811461206357600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f1657612f16612ef1565b500490565b600060208284031215612f2d57600080fd5b5051919050565b601f821115610dfd57600081815260208120601f850160051c81016020861015612f5b5750805b601f850160051c820191505b81811015612f7a57828155600101612f67565b505050505050565b81516001600160401b03811115612f9b57612f9b612ba2565b612faf81612fa98454612e53565b84612f34565b602080601f831160018114612fe45760008415612fcc5750858301515b600019600386901b1c1916600185901b178555612f7a565b600085815260208120601f198616915b8281101561301357888601518255948401946001909101908401612ff4565b50858210156130315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b038181168382160280821691908281146130aa576130aa612ddd565b505092915050565b6001600160401b038281168282160390808211156130d2576130d2612ddd565b5092915050565b62ffffff8181168382160190808211156130d2576130d2612ddd565b6000602080838503121561310857600080fd5b82516001600160401b0381111561311e57600080fd5b8301601f8101851361312f57600080fd5b805161313d612c6982612c10565b8181526060918202830184019184820191908884111561315c57600080fd5b938501935b838510156131dd5780858a0312156131795760008081fd5b613181612bb8565b85516affffffffffffffffffffff198116811461319e5760008081fd5b81528587015163ffffffff811681146131b75760008081fd5b818801526040868101516131ca81612b30565b9082015283529384019391850191613161565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561324e57815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613208565b505095909501959095525092949350505050565b60006001820161327457613274612ddd565b5060010190565b60008261328a5761328a612ef1565b500690565b808202811582820484141761117b5761117b612ddd56fea264697066735822122026b1ad371c79d9151c39dcfe3beb7c10ad2592c237d2b2cdf13f4d19fd1535a264736f6c63430008140033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162003e9438038062003e94833981016040819052620000349162000a54565b898989808084848d8d8b8a806200004b81620000fb565b506200005a848484846200017c565b505050506200007082826200029c60201b60201c565b506200009c9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b48685846200041160201b60201c565b620000c084886200054d565b620000cb85620005d3565b620000d68462000631565b620000e1826200068f565b620000eb620006ed565b5050505050505050505062000b3d565b60008111620001775760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001878462000709565b620001928362000767565b828411620001ef5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200016e565b60006066620001ff8587620007b7565b901c11620002765760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d32352900000000000000000060648201526084016200016e565b6200028182620007dd565b6200028c81620000fb565b620002966200083b565b50505050565b600754600160a01b900460ff1615620002f85760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200016e565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200016e565b6001600160a01b0381166200039b5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200016e565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b81831115620004895760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e2074686560448201527f2072616e676520696e637265617365206c696d6974000000000000000000000060648201526084016200016e565b620004ae6000620004aa83620004a3620f42408862000b04565b0260781c90565b1190565b620005485760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a4016200016e565b505050565b818111620005cf5760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a4016200016e565b5050565b620005de8162000984565b6200062c5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200016e565b601555565b6200063c8162000984565b6200068a5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c61726765000060448201526064016200016e565b601655565b6200069a8162000984565b620006e85760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200016e565b601755565b62000704620006fb6200099a565b6001607f1b0190565b601855565b620007148162000984565b620007625760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200016e565b600455565b620007728162000984565b620007b25760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200016e565b600555565b6000607f83901b8282818381620007d257620007d262000aee565b049695505050505050565b620007e88162000984565b620008365760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c617267650000000060448201526064016200016e565b600655565b6200084960016000620009b7565b6200085760026000620009b7565b6200086560036000620009b7565b6000546001600160401b0381111562000882576200088262000b27565b604051908082528060200260200182016040528015620008ac578160200160208202803683370190505b508051620008c391600191602090910190620009d7565b506000546001600160401b03811115620008e157620008e162000b27565b6040519080825280602002602001820160405280156200090b578160200160208202803683370190505b5080516200092291600291602090910190620009d7565b506000546001600160401b0381111562000940576200094062000b27565b6040519080825280602002602001820160405280156200096a578160200160208202803683370190505b5080516200098191600391602090910190620009d7565b50565b60006200099482600160801b1190565b92915050565b6000620009b2600554600454620007b760201b60201c565b905090565b508054600082559060005260206000209081019062000981919062000a27565b82805482825590600052602060002090810192821562000a15579160200282015b8281111562000a15578251825591602001919060010190620009f8565b5062000a2392915062000a27565b5090565b5b8082111562000a23576000815560010162000a28565b6001600160a01b03811681146200098157600080fd5b6000806000806000806000806000806101408b8d03121562000a7557600080fd5b8a5162000a828162000a3e565b60208c0151909a5062000a958162000a3e565b60408c015190995062000aa88162000a3e565b8098505060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b634e487b7160e01b600052601260045260246000fd5b60008262000b2257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6133478062000b4d6000396000f3fe6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612aa3565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612abc565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b6610a53565b3480156103d657600080fd5b506102746103e5366004612ace565b610af3565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612ace565b610d7c565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612ace565b610e5d565b6040516102ca929190612b48565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612b69565b610f02565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612aa3565b610f70565b3480156104fa57600080fd5b50610274610509366004612bc8565b610fe7565b34801561051a57600080fd5b506102e961104c565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9611056565b34801561056f57600080fd5b5061027461057e366004612d27565b611060565b34801561058f57600080fd5b506102e961113b565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612ddf565b611151565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612aa3565b6111dc565b3480156106ac57600080fd5b50610274611234565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612dfc565b61128a565b3480156106ff57600080fd5b506102746113f0565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612e35565b34801561076057600080fd5b5061027461076f366004612aa3565b6114b6565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c6114ee565b6107a4611556565b34600b546107b29190612e5e565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f46115a1565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b15610858576108256115e8565b600061083c6005546108376002611620565b900390565b905061084b8160165484611662565b61085482611789565b5050565b6108636000366117e3565b50565b61086e6114ee565b600080600061087c84611933565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e71565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a26000336109bd8634612e8e565b604051600081818185875af1925050503d80600081146109f9576040519150601f19603f3d011682016040523d82523d6000602084013e6109fe565b606091505b5050905080610a465760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50505050506108636115a1565b600754600090600160a81b900460ff16610a7757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190612ea1565b905090565b610afc33611151565b610b385760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610a3d565b6001600160e01b0319811660009081526009602052604081208054909103610ba25760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a3d565b8054421015610bf35760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610a3d565b6000816001018054610c0490612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090612ebe565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610caf60018301826129eb565b50506007805460ff60b01b1916600160b01b1790556040516000903090610cd7908490612ef2565b6000604051808303816000865af19150503d8060008114610d14576040519150601f19603f3d011682016040523d82523d6000602084013e610d19565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d7681611b61565b50505050565b610d84611b7e565b6001600160e01b031981166000908152600960205260408120549003610dec5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a3d565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610e5860018301826129eb565b505050565b60096020526000908152604090208054600182018054919291610e7f90612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610eab90612ebe565b8015610ef85780601f10610ecd57610100808354040283529160200191610ef8565b820191906000526020600020905b815481529060010190602001808311610edb57829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610f245750600754600160a81b900460ff16155b15610f6557610f316115e8565b610f4083601654601754611662565b610f4c60165485611bd8565b610f5884848484611c58565b610f60611d62565b610d76565b610d766000366117e3565b600754600160b01b900460ff1680610f925750600754600160a81b900460ff16155b1561085857610f9f6115e8565b6000610fb16005546108376002611620565b9050610fc08183601754611662565b6000610fd26004546108376001611d72565b9050610fde8382611bd8565b610e5883611d9f565b6010546001600160a01b031633146110415760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610a3d565b610e58838383611df9565b6000610aee611fd6565b6000610aee611fe6565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146110d95760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610a3d565b61113161110d83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ff8565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61085482826120d5565b6000610aee611148611fd6565b6001607f1b0190565b600754600090600160a01b900460ff1680156111d65750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190612f0e565b92915050565b6111e4611556565b600e819055600a546111f7908290612e5e565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112825760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610a3d565b6107f46121ed565b600754600160a01b900460ff16156112db5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610a3d565b6001600160a01b0382166113315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610a3d565b6001600160a01b03811661137a5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610a3d565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6113f8611b7e565b600754600160a81b900460ff16156114525760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610a3d565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff16806114d85750600754600160a81b900460ff16155b15610858576114e56115e8565b610863816122c6565b6000346114f9611fe6565b6115039190612e5e565b905047818111156115465761dead6108fc61151e8484612e8e565b6040518115909202916000818181858888f19350505050158015610e58573d6000803e3d6000fd5b8181101561085457610854612f30565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610a3d565b6115a9611fe6565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610a3d565b600754600160b01b900460ff16156116185733301461160957611609612f30565b6007805460ff60b01b19169055565b6107f4611b7e565b6000805b825481101561165c576116528284838154811061164357611643612f46565b90600052602060002001540190565b9150600101611624565b50919050565b818311156116d05760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610a3d565b6116f160006116ed836116e6620f424088612f72565b0260781c90565b1190565b610e585760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610a3d565b61179281612320565b6117de5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610a3d565b601755565b6117eb611b7e565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612f86565b9050600061186d8242612e5e565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118eb9082612fed565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161192494939291906130ac565b60405180910390a15050505050565b600080803460781c156119995760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610a3d565b6119a38435612320565b6119ef5760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610a3d565b3492508335915060008215611af6576000611a0f86602001356016541190565b611a1b57601654611a21565b85602001355b9050611a32816116ed600554870190565b15611a71576000611a44826005541190565b611a52576005548203611a55565b60005b9050611a6c611a64828761232f565b870260801c90565b955093505b601754840260781c915084821115611ae75760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610a3d565b611af084612352565b50611b21565b602085013515158015611b135750611b1385602001356005541190565b15611b215760009350600092505b808403848214611b5857611b34816123f6565b611b4d611b438260065461232f565b6015540260801c90565b9250611b5883612488565b50509193909250565b3d604051818101604052816000823e8215611b7a578181f35b8181fd5b611b86610a53565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610a3d565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610a3d565b611c6184612512565b611c6a83612564565b828411611cc55760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610a3d565b60006066611cd385876125b0565b901c11611d485760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610a3d565b611d51826125c8565b611d5a81612622565b610d7661269d565b611d6d611148611fd6565b601855565b6000805b825481101561165c57611d958284838154811061164357611643612f46565b9150600101611d76565b611da881612320565b611df45760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610a3d565b601655565b6000611e068260026130f2565b611e10908461311d565b6001600160401b031690506000611e4962015180600d54611e319190612e5e565b611e3b858761311d565b6001600160401b03166127cb565b90506000611e7b6001600160401b038516611e648585612e8e565b601454600b54611e749190612e8e565b91906127e1565b90506000611e8a876001613144565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ee1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f099190810190613160565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611f42929190613254565b60405180910390a28260146000828254611f5c9190612e5e565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611fb357600080fd5b505af1158015611fc7573d6000803e3d6000fd5b50505050505050505050505050565b6000610aee6005546004546125b0565b6000601454600b54610aee9190612e8e565b6000808260405160200161200c9190612e35565b6040516020818303038152906040528051906020012090506000805b86518110156120845786818151811061204357612043612f46565b602002602001015183036120725785818151811061206357612063612f46565b60200260200101519150612084565b8061207c816132cd565b915050612028565b506001600160a01b0381166120ca5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610a3d565b9150505b9392505050565b6120df8282612907565b61210d82826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ff8565b601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061216382826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611ff8565b601260006101000a8154816001600160a01b0302191690836001600160a01b031602179055506121c982826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611ff8565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b61221d60065460036121fd61296b565b8154811061220d5761220d612f46565b9060005260206000200154900390565b6006556005546122319060026121fd61296b565b6005556004546122459060016121fd61296b565b6004556000600161225461296b565b8154811061226457612264612f46565b90600052602060002001819055506000600261227e61296b565b8154811061228e5761228e612f46565b9060005260206000200181905550600060036122a861296b565b815481106122b8576122b8612f46565b600091825260209091200155565b6122cf81612320565b61231b5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610a3d565b601555565b60006111d682600160801b1190565b6000608083901b828281838161234757612347612f5c565b049695505050505050565b61237f600261235f612977565b8154811061236f5761236f612f46565b9060005260206000200154820190565b6002612389612977565b8154811061239957612399612f46565b600091825260209091200155600554810160058190556123b890612320565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a3d565b612403600361235f612977565b600361240d612977565b8154811061241d5761241d612f46565b6000918252602090912001556006548101600681905561243c90612320565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610a3d565b612495600161235f612977565b600161249f612977565b815481106124af576124af612f46565b600091825260209091200155600454810160048190556124ce90612320565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a3d565b61251b81612320565b61255f5760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a3d565b600455565b61256d81612320565b6125ab5760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a3d565b600555565b6000607f83901b828281838161234757612347612f5c565b6125d181612320565b61261d5760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610a3d565b600655565b600081116126985760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610a3d565b600055565b6126a960016000612a25565b6126b560026000612a25565b6126c160036000612a25565b6000546001600160401b038111156126db576126db612c0d565b604051908082528060200260200182016040528015612704578160200160208202803683370190505b50805161271991600191602090910190612a43565b506000546001600160401b0381111561273457612734612c0d565b60405190808252806020026020018201604052801561275d578160200160208202803683370190505b50805161277291600291602090910190612a43565b506000546001600160401b0381111561278d5761278d612c0d565b6040519080825280602002602001820160405280156127b6578160200160208202803683370190505b50805161086391600391602090910190612a43565b60008183116127da57816120ce565b5090919050565b60008082116128255760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610a3d565b83600003612835575060006120ce565b8383028385828161284857612848612f5c565b04036128665782818161285d5761285d612f5c565b049150506120ce565b5060006128738386612f72565b9050600061288184876132e6565b9050600061288f8587612f72565b9050600061289d86886132e6565b9050856128aa82856132fa565b6128b49190612f72565b6128be83856132fa565b6128c883876132fa565b886128d386896132fa565b6128dd91906132fa565b6128e79190612e5e565b6128f19190612e5e565b6128fb9190612e5e565b98975050505050505050565b6129118282612983565b612947828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611ff8565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610aee60016129d3565b6000610aee60006129d3565b6129af82826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611ff8565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129e14384612e5e565b6111d691906132e6565b5080546129f790612ebe565b6000825580601f10612a07575050565b601f0160209004906000526020600020908101906108639190612a8e565b50805460008255906000526020600020908101906108639190612a8e565b828054828255906000526020600020908101928215612a7e579160200282015b82811115612a7e578251825591602001919060010190612a63565b50612a8a929150612a8e565b5090565b5b80821115612a8a5760008155600101612a8f565b600060208284031215612ab557600080fd5b5035919050565b60006040828403121561165c57600080fd5b600060208284031215612ae057600080fd5b81356001600160e01b0319811681146120ce57600080fd5b60005b83811015612b13578181015183820152602001612afb565b50506000910152565b60008151808452612b34816020860160208601612af8565b601f01601f19169290920160200192915050565b828152604060208201526000612b616040830184612b1c565b949350505050565b60008060008060808587031215612b7f57600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612bc357600080fd5b919050565b600080600060608486031215612bdd57600080fd5b8335612be881612b9b565b9250612bf660208501612bac565b9150612c0460408501612bac565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612c4557612c45612c0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c7357612c73612c0d565b604052919050565b60006001600160401b03821115612c9457612c94612c0d565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612cc457600080fd5b81356020612cd9612cd483612c7b565b612c4b565b82815260059290921b84018101918181019086841115612cf857600080fd5b8286015b84811015612d1c578035612d0f81612c9e565b8352918301918301612cfc565b509695505050505050565b60008060408385031215612d3a57600080fd5b82356001600160401b0380821115612d5157600080fd5b818501915085601f830112612d6557600080fd5b81356020612d75612cd483612c7b565b82815260059290921b84018101918181019089841115612d9457600080fd5b948201945b83861015612db257853582529482019490820190612d99565b96505086013592505080821115612dc857600080fd5b50612dd585828601612cb3565b9150509250929050565b600060208284031215612df157600080fd5b81356120ce81612c9e565b60008060408385031215612e0f57600080fd5b8235612e1a81612c9e565b91506020830135612e2a81612c9e565b809150509250929050565b6020815260006120ce6020830184612b1c565b634e487b7160e01b600052601160045260246000fd5b808201808211156111d6576111d6612e48565b600060208284031215612e8357600080fd5b81516120ce81612b9b565b818103818111156111d6576111d6612e48565b600060208284031215612eb357600080fd5b81516120ce81612c9e565b600181811c90821680612ed257607f821691505b60208210810361165c57634e487b7160e01b600052602260045260246000fd5b60008251612f04818460208701612af8565b9190910192915050565b600060208284031215612f2057600080fd5b815180151581146120ce57600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f8157612f81612f5c565b500490565b600060208284031215612f9857600080fd5b5051919050565b601f821115610e5857600081815260208120601f850160051c81016020861015612fc65750805b601f850160051c820191505b81811015612fe557828155600101612fd2565b505050505050565b81516001600160401b0381111561300657613006612c0d565b61301a816130148454612ebe565b84612f9f565b602080601f83116001811461304f57600084156130375750858301515b600019600386901b1c1916600185901b178555612fe5565b600085815260208120601f198616915b8281101561307e5788860151825594840194600190910190840161305f565b508582101561309c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b0381811683821602808216919082811461311557613115612e48565b505092915050565b6001600160401b0382811682821603908082111561313d5761313d612e48565b5092915050565b62ffffff81811683821601908082111561313d5761313d612e48565b6000602080838503121561317357600080fd5b82516001600160401b0381111561318957600080fd5b8301601f8101851361319a57600080fd5b80516131a8612cd482612c7b565b818152606091820283018401918482019190888411156131c757600080fd5b938501935b838510156132485780858a0312156131e45760008081fd5b6131ec612c23565b85516affffffffffffffffffffff19811681146132095760008081fd5b81528587015163ffffffff811681146132225760008081fd5b8188015260408681015161323581612b9b565b90820152835293840193918501916131cc565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b838110156132b957815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613273565b505095909501959095525092949350505050565b6000600182016132df576132df612e48565b5060010190565b6000826132f5576132f5612f5c565b500690565b80820281158282048414176111d6576111d6612e4856fea264697066735822122097356726761c57878c253f4db6f27cced4e558bc53d176d8d3dae5ebe895097f64736f6c63430008140033", + "deployedBytecode": "0x6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612aa3565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612abc565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b6610a53565b3480156103d657600080fd5b506102746103e5366004612ace565b610af3565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612ace565b610d7c565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612ace565b610e5d565b6040516102ca929190612b48565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612b69565b610f02565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612aa3565b610f70565b3480156104fa57600080fd5b50610274610509366004612bc8565b610fe7565b34801561051a57600080fd5b506102e961104c565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9611056565b34801561056f57600080fd5b5061027461057e366004612d27565b611060565b34801561058f57600080fd5b506102e961113b565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612ddf565b611151565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612aa3565b6111dc565b3480156106ac57600080fd5b50610274611234565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612dfc565b61128a565b3480156106ff57600080fd5b506102746113f0565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612e35565b34801561076057600080fd5b5061027461076f366004612aa3565b6114b6565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c6114ee565b6107a4611556565b34600b546107b29190612e5e565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f46115a1565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b15610858576108256115e8565b600061083c6005546108376002611620565b900390565b905061084b8160165484611662565b61085482611789565b5050565b6108636000366117e3565b50565b61086e6114ee565b600080600061087c84611933565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e71565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a26000336109bd8634612e8e565b604051600081818185875af1925050503d80600081146109f9576040519150601f19603f3d011682016040523d82523d6000602084013e6109fe565b606091505b5050905080610a465760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50505050506108636115a1565b600754600090600160a81b900460ff16610a7757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190612ea1565b905090565b610afc33611151565b610b385760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610a3d565b6001600160e01b0319811660009081526009602052604081208054909103610ba25760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a3d565b8054421015610bf35760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610a3d565b6000816001018054610c0490612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090612ebe565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610caf60018301826129eb565b50506007805460ff60b01b1916600160b01b1790556040516000903090610cd7908490612ef2565b6000604051808303816000865af19150503d8060008114610d14576040519150601f19603f3d011682016040523d82523d6000602084013e610d19565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d7681611b61565b50505050565b610d84611b7e565b6001600160e01b031981166000908152600960205260408120549003610dec5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a3d565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610e5860018301826129eb565b505050565b60096020526000908152604090208054600182018054919291610e7f90612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610eab90612ebe565b8015610ef85780601f10610ecd57610100808354040283529160200191610ef8565b820191906000526020600020905b815481529060010190602001808311610edb57829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610f245750600754600160a81b900460ff16155b15610f6557610f316115e8565b610f4083601654601754611662565b610f4c60165485611bd8565b610f5884848484611c58565b610f60611d62565b610d76565b610d766000366117e3565b600754600160b01b900460ff1680610f925750600754600160a81b900460ff16155b1561085857610f9f6115e8565b6000610fb16005546108376002611620565b9050610fc08183601754611662565b6000610fd26004546108376001611d72565b9050610fde8382611bd8565b610e5883611d9f565b6010546001600160a01b031633146110415760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610a3d565b610e58838383611df9565b6000610aee611fd6565b6000610aee611fe6565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146110d95760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610a3d565b61113161110d83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ff8565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61085482826120d5565b6000610aee611148611fd6565b6001607f1b0190565b600754600090600160a01b900460ff1680156111d65750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190612f0e565b92915050565b6111e4611556565b600e819055600a546111f7908290612e5e565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112825760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610a3d565b6107f46121ed565b600754600160a01b900460ff16156112db5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610a3d565b6001600160a01b0382166113315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610a3d565b6001600160a01b03811661137a5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610a3d565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6113f8611b7e565b600754600160a81b900460ff16156114525760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610a3d565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff16806114d85750600754600160a81b900460ff16155b15610858576114e56115e8565b610863816122c6565b6000346114f9611fe6565b6115039190612e5e565b905047818111156115465761dead6108fc61151e8484612e8e565b6040518115909202916000818181858888f19350505050158015610e58573d6000803e3d6000fd5b8181101561085457610854612f30565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610a3d565b6115a9611fe6565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610a3d565b600754600160b01b900460ff16156116185733301461160957611609612f30565b6007805460ff60b01b19169055565b6107f4611b7e565b6000805b825481101561165c576116528284838154811061164357611643612f46565b90600052602060002001540190565b9150600101611624565b50919050565b818311156116d05760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610a3d565b6116f160006116ed836116e6620f424088612f72565b0260781c90565b1190565b610e585760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610a3d565b61179281612320565b6117de5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610a3d565b601755565b6117eb611b7e565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa15801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190612f86565b9050600061186d8242612e5e565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118eb9082612fed565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161192494939291906130ac565b60405180910390a15050505050565b600080803460781c156119995760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610a3d565b6119a38435612320565b6119ef5760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610a3d565b3492508335915060008215611af6576000611a0f86602001356016541190565b611a1b57601654611a21565b85602001355b9050611a32816116ed600554870190565b15611a71576000611a44826005541190565b611a52576005548203611a55565b60005b9050611a6c611a64828761232f565b870260801c90565b955093505b601754840260781c915084821115611ae75760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610a3d565b611af084612352565b50611b21565b602085013515158015611b135750611b1385602001356005541190565b15611b215760009350600092505b808403848214611b5857611b34816123f6565b611b4d611b438260065461232f565b6015540260801c90565b9250611b5883612488565b50509193909250565b3d604051818101604052816000823e8215611b7a578181f35b8181fd5b611b86610a53565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610a3d565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610a3d565b611c6184612512565b611c6a83612564565b828411611cc55760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610a3d565b60006066611cd385876125b0565b901c11611d485760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610a3d565b611d51826125c8565b611d5a81612622565b610d7661269d565b611d6d611148611fd6565b601855565b6000805b825481101561165c57611d958284838154811061164357611643612f46565b9150600101611d76565b611da881612320565b611df45760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610a3d565b601655565b6000611e068260026130f2565b611e10908461311d565b6001600160401b031690506000611e4962015180600d54611e319190612e5e565b611e3b858761311d565b6001600160401b03166127cb565b90506000611e7b6001600160401b038516611e648585612e8e565b601454600b54611e749190612e8e565b91906127e1565b90506000611e8a876001613144565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ee1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f099190810190613160565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611f42929190613254565b60405180910390a28260146000828254611f5c9190612e5e565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611fb357600080fd5b505af1158015611fc7573d6000803e3d6000fd5b50505050505050505050505050565b6000610aee6005546004546125b0565b6000601454600b54610aee9190612e8e565b6000808260405160200161200c9190612e35565b6040516020818303038152906040528051906020012090506000805b86518110156120845786818151811061204357612043612f46565b602002602001015183036120725785818151811061206357612063612f46565b60200260200101519150612084565b8061207c816132cd565b915050612028565b506001600160a01b0381166120ca5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610a3d565b9150505b9392505050565b6120df8282612907565b61210d82826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ff8565b601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061216382826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611ff8565b601260006101000a8154816001600160a01b0302191690836001600160a01b031602179055506121c982826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611ff8565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b61221d60065460036121fd61296b565b8154811061220d5761220d612f46565b9060005260206000200154900390565b6006556005546122319060026121fd61296b565b6005556004546122459060016121fd61296b565b6004556000600161225461296b565b8154811061226457612264612f46565b90600052602060002001819055506000600261227e61296b565b8154811061228e5761228e612f46565b9060005260206000200181905550600060036122a861296b565b815481106122b8576122b8612f46565b600091825260209091200155565b6122cf81612320565b61231b5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610a3d565b601555565b60006111d682600160801b1190565b6000608083901b828281838161234757612347612f5c565b049695505050505050565b61237f600261235f612977565b8154811061236f5761236f612f46565b9060005260206000200154820190565b6002612389612977565b8154811061239957612399612f46565b600091825260209091200155600554810160058190556123b890612320565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a3d565b612403600361235f612977565b600361240d612977565b8154811061241d5761241d612f46565b6000918252602090912001556006548101600681905561243c90612320565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610a3d565b612495600161235f612977565b600161249f612977565b815481106124af576124af612f46565b600091825260209091200155600454810160048190556124ce90612320565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a3d565b61251b81612320565b61255f5760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a3d565b600455565b61256d81612320565b6125ab5760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a3d565b600555565b6000607f83901b828281838161234757612347612f5c565b6125d181612320565b61261d5760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610a3d565b600655565b600081116126985760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610a3d565b600055565b6126a960016000612a25565b6126b560026000612a25565b6126c160036000612a25565b6000546001600160401b038111156126db576126db612c0d565b604051908082528060200260200182016040528015612704578160200160208202803683370190505b50805161271991600191602090910190612a43565b506000546001600160401b0381111561273457612734612c0d565b60405190808252806020026020018201604052801561275d578160200160208202803683370190505b50805161277291600291602090910190612a43565b506000546001600160401b0381111561278d5761278d612c0d565b6040519080825280602002602001820160405280156127b6578160200160208202803683370190505b50805161086391600391602090910190612a43565b60008183116127da57816120ce565b5090919050565b60008082116128255760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610a3d565b83600003612835575060006120ce565b8383028385828161284857612848612f5c565b04036128665782818161285d5761285d612f5c565b049150506120ce565b5060006128738386612f72565b9050600061288184876132e6565b9050600061288f8587612f72565b9050600061289d86886132e6565b9050856128aa82856132fa565b6128b49190612f72565b6128be83856132fa565b6128c883876132fa565b886128d386896132fa565b6128dd91906132fa565b6128e79190612e5e565b6128f19190612e5e565b6128fb9190612e5e565b98975050505050505050565b6129118282612983565b612947828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611ff8565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610aee60016129d3565b6000610aee60006129d3565b6129af82826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611ff8565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129e14384612e5e565b6111d691906132e6565b5080546129f790612ebe565b6000825580601f10612a07575050565b601f0160209004906000526020600020908101906108639190612a8e565b50805460008255906000526020600020908101906108639190612a8e565b828054828255906000526020600020908101928215612a7e579160200282015b82811115612a7e578251825591602001919060010190612a63565b50612a8a929150612a8e565b5090565b5b80821115612a8a5760008155600101612a8f565b600060208284031215612ab557600080fd5b5035919050565b60006040828403121561165c57600080fd5b600060208284031215612ae057600080fd5b81356001600160e01b0319811681146120ce57600080fd5b60005b83811015612b13578181015183820152602001612afb565b50506000910152565b60008151808452612b34816020860160208601612af8565b601f01601f19169290920160200192915050565b828152604060208201526000612b616040830184612b1c565b949350505050565b60008060008060808587031215612b7f57600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612bc357600080fd5b919050565b600080600060608486031215612bdd57600080fd5b8335612be881612b9b565b9250612bf660208501612bac565b9150612c0460408501612bac565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612c4557612c45612c0d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c7357612c73612c0d565b604052919050565b60006001600160401b03821115612c9457612c94612c0d565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612cc457600080fd5b81356020612cd9612cd483612c7b565b612c4b565b82815260059290921b84018101918181019086841115612cf857600080fd5b8286015b84811015612d1c578035612d0f81612c9e565b8352918301918301612cfc565b509695505050505050565b60008060408385031215612d3a57600080fd5b82356001600160401b0380821115612d5157600080fd5b818501915085601f830112612d6557600080fd5b81356020612d75612cd483612c7b565b82815260059290921b84018101918181019089841115612d9457600080fd5b948201945b83861015612db257853582529482019490820190612d99565b96505086013592505080821115612dc857600080fd5b50612dd585828601612cb3565b9150509250929050565b600060208284031215612df157600080fd5b81356120ce81612c9e565b60008060408385031215612e0f57600080fd5b8235612e1a81612c9e565b91506020830135612e2a81612c9e565b809150509250929050565b6020815260006120ce6020830184612b1c565b634e487b7160e01b600052601160045260246000fd5b808201808211156111d6576111d6612e48565b600060208284031215612e8357600080fd5b81516120ce81612b9b565b818103818111156111d6576111d6612e48565b600060208284031215612eb357600080fd5b81516120ce81612c9e565b600181811c90821680612ed257607f821691505b60208210810361165c57634e487b7160e01b600052602260045260246000fd5b60008251612f04818460208701612af8565b9190910192915050565b600060208284031215612f2057600080fd5b815180151581146120ce57600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f8157612f81612f5c565b500490565b600060208284031215612f9857600080fd5b5051919050565b601f821115610e5857600081815260208120601f850160051c81016020861015612fc65750805b601f850160051c820191505b81811015612fe557828155600101612fd2565b505050505050565b81516001600160401b0381111561300657613006612c0d565b61301a816130148454612ebe565b84612f9f565b602080601f83116001811461304f57600084156130375750858301515b600019600386901b1c1916600185901b178555612fe5565b600085815260208120601f198616915b8281101561307e5788860151825594840194600190910190840161305f565b508582101561309c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b0381811683821602808216919082811461311557613115612e48565b505092915050565b6001600160401b0382811682821603908082111561313d5761313d612e48565b5092915050565b62ffffff81811683821601908082111561313d5761313d612e48565b6000602080838503121561317357600080fd5b82516001600160401b0381111561318957600080fd5b8301601f8101851361319a57600080fd5b80516131a8612cd482612c7b565b818152606091820283018401918482019190888411156131c757600080fd5b938501935b838510156132485780858a0312156131e45760008081fd5b6131ec612c23565b85516affffffffffffffffffffff19811681146132095760008081fd5b81528587015163ffffffff811681146132225760008081fd5b8188015260408681015161323581612b9b565b90820152835293840193918501916131cc565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b838110156132b957815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613273565b505095909501959095525092949350505050565b6000600182016132df576132df612e48565b5060010190565b6000826132f5576132f5612f5c565b500690565b80820281158282048414176111d6576111d6612e4856fea264697066735822122097356726761c57878c253f4db6f27cced4e558bc53d176d8d3dae5ebe895097f64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abi/FastUpdater.json b/abi/FastUpdater.json index 0b43462f..1dfef423 100644 --- a/abi/FastUpdater.json +++ b/abi/FastUpdater.json @@ -409,6 +409,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "feeCalculator", + "outputs": [ + { + "internalType": "contract IIFeeCalculator", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeDestination", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "fetchAllCurrentFeeds", @@ -434,7 +460,7 @@ "type": "uint64" } ], - "stateMutability": "view", + "stateMutability": "payable", "type": "function" }, { @@ -463,7 +489,7 @@ "type": "uint64" } ], - "stateMutability": "view", + "stateMutability": "payable", "type": "function" }, { @@ -544,6 +570,19 @@ "stateMutability": "pure", "type": "function" }, + { + "inputs": [], + "name": "getFreeFetchAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "governance", @@ -684,6 +723,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_feeDestination", + "type": "address" + } + ], + "name": "setFeeDestination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_freeFetchAddresses", + "type": "address[]" + } + ], + "name": "setFreeFetchAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -739,7 +804,7 @@ "type": "uint256" } ], - "internalType": "struct Bn256.G1Point", + "internalType": "struct G1Point", "name": "gamma", "type": "tuple" }, @@ -913,8 +978,8 @@ "type": "function" } ], - "bytecode": "0x60e06040526001607f1b600e553480156200001957600080fd5b5060405162006026380380620060268339810160408190526200003c91620005aa565b8487876200004b8282620001d1565b50620000779050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000c85760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200011d5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000bf565b6001600160a01b03841660c05263ffffffff831660805260ff821660a0526200014562000346565b6005805463ffffffff929092166401000000000263ffffffff60201b1990921691909117905562000176816200037e565b62000180620003e9565b604080516103e8808252617d20820190925290816020015b6060815260200190600190039081620001985750508051620001c391600f916020909101906200045d565b505050505050505062000837565b600054600160a01b900460ff16156200022d5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620002855760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b038116620002d05760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b600060a0516001600160401b03166080516001600160401b0316426200036d919062000681565b6200037991906200069d565b905090565b60648160ff1610620003d35760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401620000bf565b6005805460ff191660ff92909216919091179055565b600554620003fc9060ff166001620006c0565b60ff166001600160401b0381111562000419576200041962000655565b60405190808252806020026020018201604052801562000443578160200160208202803683370190505b5080516200045a91600d91602090910190620004ba565b50565b828054828255906000526020600020908101928215620004a8579160200282015b82811115620004a857825182906200049790826200076b565b50916020019190600101906200047e565b50620004b692915062000506565b5090565b828054828255906000526020600020908101928215620004f8579160200282015b82811115620004f8578251825591602001919060010190620004db565b50620004b692915062000527565b80821115620004b65760006200051d82826200053e565b5060010162000506565b5b80821115620004b6576000815560010162000528565b5080546200054c90620006dc565b6000825580601f106200055d575050565b601f0160209004906000526020600020908101906200045a919062000527565b6001600160a01b03811681146200045a57600080fd5b805160ff81168114620005a557600080fd5b919050565b600080600080600080600060e0888a031215620005c657600080fd5b8751620005d3816200057d565b6020890151909750620005e6816200057d565b6040890151909650620005f9816200057d565b60608901519095506200060c816200057d565b608089015190945063ffffffff811681146200062757600080fd5b92506200063760a0890162000593565b91506200064760c0890162000593565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156200069757620006976200066b565b92915050565b600082620006bb57634e487b7160e01b600052601260045260246000fd5b500490565b60ff81811683821601908111156200069757620006976200066b565b600181811c90821680620006f157607f821691505b6020821081036200071257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076657600081815260208120601f850160051c81016020861015620007415750805b601f850160051c820191505b8181101562000762578281556001016200074d565b5050505b505050565b81516001600160401b0381111562000787576200078762000655565b6200079f81620007988454620006dc565b8462000718565b602080601f831160018114620007d75760008415620007be5750858301515b600019600386901b1c1916600185901b17855562000762565b600085815260208120601f198616915b828110156200080857888601518255948401946001909101908401620007e7565b5085821015620008275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516157a3620008836000396000818161042d01528181611c8a01526125c601526000818161030b015261336d01526000818161053c015261339701526157a36000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063a107753211610130578063e17f212e116100b8578063ef88bf131161007c578063ef88bf131461055e578063f5a9838314610571578063f5f5ba7214610579578063faae7fc9146105a6578063fc79c300146105b957600080fd5b8063e17f212e146104dc578063e22fdece146104f0578063e36da7b7146104f8578063e621dbc714610518578063e8d0e70a1461053757600080fd5b8063be60040e116100ff578063be60040e14610488578063c10f489a1461049b578063c1bff139146104ae578063dcb1476e146104b6578063debfda30146104c957600080fd5b8063a107753214610428578063a14634a71461044f578063abfaf17014610462578063b00c0b761461047557600080fd5b80635ff27079116101be57806370473f2f1161018257806370473f2f146103b157806374e6310e146103c45780637925eaca146103e55780637fe3341a146103f85780638e0e9f7c1461040057600080fd5b80635ff270791461034d57806362354e031461036057806363f921db1461037357806367fc4029146103865780636d0e8c341461039957600080fd5b80634691377f116102055780634691377f146102b4578063470e91df146102cc5780635267a15d146102df5780635a832088146103065780635aa6e6751461034557600080fd5b80630799fe75146102375780630a1660511461025257806329bfe39d1461026757806345a15d3c14610292575b600080fd5b61023f6105cc565b6040519081526020015b60405180910390f35b6102656102603660046146cb565b6105db565b005b60095461027a906001600160a01b031681565b6040516001600160a01b039091168152602001610249565b6102a56102a03660046146ee565b610635565b604051610249939291906147dc565b6102bc610aba565b604051610249949392919061481b565b6102656102da3660046148a2565b610c56565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461027a565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610249565b61027a611225565b61026561035b3660046148dd565b6112bc565b60005461027a906001600160a01b031681565b6102656103813660046146ee565b611542565b6102656103943660046148dd565b611b9c565b6103a1611c7d565b6040519015158152602001610249565b6102656103bf36600461498a565b611fc2565b6103d76103d23660046148dd565b6120c3565b604051610249929190614a94565b60075461027a906001600160a01b031681565b61023f601481565b60055461041490610100900462ffffff1681565b60405162ffffff9091168152602001610249565b61027a7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61045d366004614aad565b612168565b610265610470366004614aed565b61218a565b610265610483366004614bf1565b612385565b60085461027a906001600160a01b031681565b600a5461027a906001600160a01b031681565b61023f606481565b61023f6104c4366004614ca9565b612460565b6103a16104d7366004614aad565b612530565b6000546103a190600160a81b900460ff1681565b6103a16125b9565b61050b610506366004614ca9565b61262d565b6040516102499190614cc2565b6005546105259060ff1681565b60405160ff9091168152602001610249565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b61026561056c366004614cd5565b612724565b61026561288a565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b602082015290516102499190614d0e565b60065461027a906001600160a01b031681565b61023f6105c7366004614ca9565b612950565b60006105d66129e4565b905090565b600054600160b01b900460ff16806105fd5750600054600160a81b900460ff16155b1561062a5761060a612be2565b61061381612c1c565b61061f600d6000614613565b610627612c85565b50565b610627600036612cee565b6060806000836001600160401b038111156106525761065261491c565b60405190808252806020026020018201604052801561067b578160200160208202803683370190505b5060405160048082525491935090600080600019600184160161074857602084206060850152600283049250602089853760208451046020850152828451106106c357600080fd5b602084015160608501510154915060005b888110156107425760208082028b01863760208551049150838551106106f957600080fd5b602085510660408601526020850151821461071f57816020860152816060860151015492505b604085015160080283901b60f81c602082810289010181905291506001016106d4565b50600192505b6001831661079d576002603f84160492915060005b8881101561079b5760208082028b0186378385511061077b57600080fd5b845160080283901b60f81c6020828102890101819052915060010161075d565b505b505050506107a9612e3a565b9050836001600160401b038111156107c3576107c361491c565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50600e546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802606083015260105460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a8110156108ee5760208082028d0187378486511061089c57600080fd5b6008865104915060088651066040870152602086015182146108c9578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c01015260018101905061087e565b506011545b60c08601518114610aac57606086015181016080870181905254945060001960018616016109fd5760206080870181812090526002909504948c87376080865104602087015260048502865110156109545760208601516080870151015493505b60005b8b8110156109f75760208082028e0188376080875104925060048602875110156109ef5760808751066040880152602087015183146109a157826020880152826080880151015494505b604087015160020285901b60fe1c925060001983016109d15760208181028c010180518902607f81901c90915293505b600383036109ef5760208181028c01018051607f1b89810490915293505b600101610957565b50600194505b60018516610a9d576002603f86160494935060208c87376080865104602087015260005b8b811015610a9b5760208082028e0188376004860287511015610a93578651607f166040880181905260020285901b60fe1c92506000198301610a755760208181028c010180518902607f81901c90915293505b60038303610a935760208181028c01018051607f1b89810490915293505b600101610a21565b505b6103e8600182010690506108f3565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c9190810190614d3e565b935060048054610b4b90614dca565b9050845114610b5c57610b5c614dfe565b600084516001600160401b03811115610b7757610b7761491c565b604051908082528060200260200182016040528015610ba0578160200160208202803683370190505b50905060005b8151811015610bdf5780828281518110610bc257610bc2614e14565b602090810291909101015280610bd781614e40565b915050610ba6565b50604051631168574f60e21b815230906345a15d3c90610c03908490600401614cc2565b600060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c489190810190614ee4565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff16610c82838535614faf565b4310610cec5760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8335431015610d535760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610ce3565b600354610d61906008614fc2565b610d6e60c0860186614fd9565b610d7a91506004614fc2565b1115610dd25760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610ce3565b60006002853560208701610de960c0890189614fd9565b604051602001610dfc9493929190615048565b60408051601f1981840301815290829052610e1691615091565b602060405180830381855afa158015610e33573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e5691906150ad565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190610eae83610e9f6101008b01856146cb565b84602001358560400135612e94565b90506001600160a01b038116610f065760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ce3565b600080610f138389612ec2565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906150ad565b81528c356020820152604001600d610fac8d6001614faf565b610fb7908f356150dc565b81548110610fc757610fc7614e14565b6000918252602080832090910154835282810186905260409283018790528e35808352600b8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261103991615091565b602060405180830381855afa158015611056573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107991906150ad565b905060005b8254811015611104578183828154811061109a5761109a614e14565b9060005260206000200154036110f25760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610ce3565b806110fc81614e40565b91505061107e565b5081819080600181540180825580915050600190039060005260206000200160009091909190915055600061114c848f60200180360381019061114791906150f0565b612ff0565b5090508061119c5760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610ce3565b6111b48e8060c001906111af9190614fd9565b6130a3565b436000908152600c602052604081208054600192906111d4908490614faf565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661124757506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061517e565b6112c533612530565b6113015760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610ce3565b6001600160e01b031981166000908152600260205260408120805490910361136b5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b80544210156113bc5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ce3565b60008160010180546113cd90614dca565b80601f01602080910402602001604051908101604052809291908181526020018280546113f990614dca565b80156114465780601f1061141b57610100808354040283529160200191611446565b820191906000526020600020905b81548152906001019060200180831161142957829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506114786001830182614631565b50506000805460ff60b01b1916600160b01b178155604051309061149d908490615091565b6000604051808303816000865af19150503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161153c816130f5565b50505050565b600a546001600160a01b0316331480611573575061155e611225565b6001600160a01b0316336001600160a01b0316145b6115d55760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610ce3565b6115dd613112565b6000805b8281101561163757818484838181106115fc576115fc614e14565b9050602002013511156116255783838281811061161b5761161b614e14565b9050602002013591505b8061162f81614e40565b9150506115e1565b5060006004805461164790614dca565b9150505b8181116116c657600460018180548061166390614dca565b80601f81036116825783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156116b15790600052602060002090602091828204019190065b508190506116be81614e40565b91505061164b565b506003545b6116d660088361519b565b81116116fa57600380546001018155600052806116f281614e40565b9150506116cb565b506004805461170890614dca565b600354909150611719906008614fc2565b101561172757611727614dfe565b6000611731613369565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b291906150ad565b905060008060005b86811015611b9257600a546000906001600160a01b031663931028368a8a858181106117e8576117e8614e14565b905060200201356040518263ffffffff1660e01b815260040161180d91815260200190565b602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906151af565b90506001600160581b0319811661189d5760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610ce3565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906151dc565b9050866014826000015163ffffffff1661192e9190614faf565b1161196a5760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610ce3565b6000816040015160030b136119c15760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610ce3565b6119da816040015163ffffffff168260800151886133d4565b9095509350600060088b8b868181106119f5576119f5614e14565b90506020020135611a06919061519b565b9050600060088c8c87818110611a1e57611a1e614e14565b90506020020135611a2f91906150dc565b611a3a90600761527c565b611a45906020614fc2565b6003805491925063ffffffff831b199189841b91839186908110611a6b57611a6b614e14565b9060005260206000200154161760038481548110611a8b57611a8b614e14565b90600052602060002001819055508660f81b60048e8e89818110611ab157611ab1614e14565b905060200201358154611ac390614dca565b8110611ad157611ad1614e14565b815460011615611af05790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611b2d57611b2d614e14565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b604051611b7292919091825260000b602082015260400190565b60405180910390a450505050508080611b8a90614e40565b9150506117ba565b5050505050505050565b611ba46134b6565b6001600160e01b031981166000908152600260205260408120549003611c0c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611c786001830182614631565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ceb5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b611cf3613112565b6000611cfd613369565b60055490915063ffffffff64010000000090910481169082161115611d9957600080611d27613510565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050611d5760018461528f565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051611d8e9291906152ac565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906152d1565b60055490915062ffffff8083166101009092041614611e4157611e28613818565b6005805463ffffff00191661010062ffffff8416021790555b611e49613a31565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff9092169190911717905550611f0290506129e4565b600554600d90611f169060ff1660016152f6565b60ff16611f24436001614faf565b611f2e91906150dc565b81548110611f3e57611f3e614e14565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb691906150ad565b600e5550600191505090565b600080600083806020019051810190611fdb919061530f565b6040805180820190915289815260208101899052929550909350915061200081613ab7565b61200957600080fd5b604080518082019091528381526020810183905261202681613ab7565b61202f57600080fd5b6040516bffffffffffffffffffffffff1960608b901b1660208201526120b890839060029060340160408051601f198184030181529082905261207191615091565b602060405180830381855afa15801561208e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120b191906150ad565b8784613b02565b505050505050505050565b600260205260009081526040902080546001820180549192916120e590614dca565b80601f016020809104026020016040519081016040528092919081815260200182805461211190614dca565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b5050505050905082565b600554600090612183908390610100900462ffffff16612ec2565b9392505050565b600a546001600160a01b031633146121e45760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610ce3565b6121ec613112565b60005b8151811015612381576000600883838151811061220e5761220e614e14565b6020026020010151612220919061519b565b90506000600884848151811061223857612238614e14565b602002602001015161224a91906150dc565b61225590600761527c565b612260906020614fc2565b6003805491925063ffffffff831b19918291908590811061228357612283614e14565b906000526020600020015416600384815481106122a2576122a2614e14565b9060005260206000200181905550600060f81b60048686815181106122c9576122c9614e14565b602002602001015181546122dc90614dca565b81106122ea576122ea614e14565b8154600116156123095790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061233757612337614e14565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061237990614e40565b9150506121ef565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146123fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ce3565b61245661243283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613c3b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6123818282613d16565b600061246d436001614faf565b821115801561248a57506005546124879060ff1683614faf565b43105b6124ed5760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b6064820152608401610ce3565b600554600d906125019060ff1660016152f6565b61250e9060ff16846150dc565b8154811061251e5761251e614e14565b90600052602060002001549050919050565b60008054600160a01b900460ff1680156125b35750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b3919061533d565b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126275760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b50600090565b6060606482111580156126405750438211155b6126835760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b6044820152606401610ce3565b816001600160401b0381111561269b5761269b61491c565b6040519080825280602002602001820160405280156126c4578160200160208202803683370190505b50905060005b8281101561271e57600c60006126e0834361527c565b81526020019081526020016000205482828151811061270157612701614e14565b60209081029190910101528061271681614e40565b9150506126ca565b50919050565b600054600160a01b900460ff16156127755760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ce3565b6001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ce3565b6001600160a01b0381166128145760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ce3565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6128926134b6565b600054600160a81b900460ff16156128ec5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ce3565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b60004361295e606484614faf565b11801561296b5750438211155b6129d15760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b6064820152608401610ce3565b506000908152600c602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e91906150ad565b90506078600c612a6e8183614faf565b612a7a9061010061527c565b612a85906002614fc2565b612a8f919061527c565b612a99919061527c565b81612aa6600c6078614faf565b612ab29061010061527c565b612abd906002614fc2565b60008051602061574e833981519152901c612ad89190614fc2565b901b9150612ae8600c6078614faf565b612af49061010061527c565b612b00600c6078614faf565b612b0a919061527c565b816001612b19600c6078614faf565b612b259061010061527c565b612b30906002615443565b612b3a919061527c565b612b46600c6078614faf565b612b529061010061527c565b60008051602061574e833981519152901c16612b6e9190614fc2565b612b79911c83614faf565b9150612b87600c6078614faf565b816001612b96600c6078614faf565b612ba29061010061527c565b612bad906002615443565b612bb7919061527c565b60008051602061574e83398151915216612bd19190614fc2565b612bdc911c83614faf565b91505090565b600054600160b01b900460ff1615612c1257333014612c0357612c03614dfe565b6000805460ff60b01b19169055565b612c1a6134b6565b565b60648160ff1610612c6f5760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401610ce3565b6005805460ff191660ff92909216919091179055565b600554612c969060ff1660016152f6565b60ff166001600160401b03811115612cb057612cb061491c565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b50805161062791600d9160209091019061466b565b612cf66134b6565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6691906150ad565b90506000612d748242614faf565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612df2908261549d565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051612e2b949392919061555c565b60405180910390a15050505050565b600060105460115403612e6357506005546801000000000000000090046001600160401b031690565b436000908152600c602052604090205415612e7d57504290565b50600554600160801b90046001600160401b031690565b600080600080612ea688888888613eec565b925092509250612eb68282613fbb565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa158015612f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f559190615585565b9296509094509250905083151580612f6c57508215155b612fb85760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f742072656769737465726564000000000000006044820152606401610ce3565b60408051808201909152848152602081018490529550612fe361ffff80841690611000908416614074565b9450505050509250929050565b60008083606001518360000151106130705760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610ce3565b600061307c85856140b4565b602085015151909150818015613096575085604001518111155b93509150505b9250929050565b8181600f601054815481106130ba576130ba614e14565b9060005260206000200191826130d19291906155cb565b506103e860105460016130e49190614faf565b6130ee91906150dc565b6010555050565b3d604051818101604052816000823e821561310e578181f35b8181fd5b61311a612e3a565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600e549050604051602081016040820160608301601054608085015260008060008060008060038752602087208752600f89526011545b60808b015181146133535760208a208101808a52549150600019600183160161328a5760208920895260028204915060005b6001602060018503040181101561328457808a510154935060005b61010081101561327b5783600882046020840201101561327b576010810460108302018a51015497506000955060005b60088110156132655760208181028a901b60e01c9850830260088304018511156132465785821b60fe1c99506000198a0161323357968e02607f1c965b60038a0361324657607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016131f6565b508560108083030460108402018b5101556131c6565b506001016131ab565b50600191505b60018216613344579091506002603f8316049060005b610100811015613342578260088204101561334257601081048951015496506000945060005b6008811015613331576020810288901b60e01c9650600882048411156133125784821b60fe1c985060001989016132ff57958d02607f1c955b6003890361331257607f9690961b8d9004955b6020810260e0039690961b9594861794600291909101906001016132c6565b50846010808303048a5101556132a0565b505b6103e860018201069050613179565b5050505050505050505060808101516011555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426133ca919061527c565b6105d6919061519b565b600080846000036133e95750839050826134ae565b8484601d82901c158015906134025750607f198160000b135b1561342257613412600a8361519b565b915061341f60018261568a565b90505b6000607f6134308785614fc2565b901c90506000613440848361527c565b90505b600381901c1580156134585750607f8360000b125b80156134665750601c84901c155b156134a65761347684600a614fc2565b93506134838360016156ab565b9250607f6134918886614fc2565b901c915061349f848361527c565b9050613443565b509193509150505b935093915050565b6134be611225565b6001600160a01b0316336001600160a01b031614612c1a5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ce3565b6060806004805461352090614dca565b90506001600160401b038111156135395761353961491c565b604051908082528060200260200182016040528015613562578160200160208202803683370190505b5091506004805461357290614dca565b90506001600160401b0381111561358b5761358b61491c565b6040519080825280602002602001820160405280156135b4578160200160208202803683370190505b5090506000806008600480546135c990614dca565b6135d492915061519b565b905060005b818110156136ed576000600382815481106135f6576135f6614e14565b600091825260208220015491505b60088110156136d85760008161361b856008614fc2565b6136259190614faf565b9050600481815461363590614dca565b811061364357613643614e14565b8154600116156136625790600052602060002090602091828204019190065b9054901a600160f81b0260f81c87828151811061368157613681614e14565b60009290920b60209283029190910182015261369e908390614fc2565b955060e08684901b901c8882815181106136ba576136ba614e14565b602090810291909101015250806136d081614e40565b915050613604565b505080806136e590614e40565b9150506135d9565b506008600480546136fd90614dca565b6137089291506150dc565b156138125760006003828154811061372257613722614e14565b6000918252602082200154915061373a836008614fc2565b90505b6004805461374a90614dca565b905081101561380f57600481815461376190614dca565b811061376f5761376f614e14565b81546001161561378e5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106137ad576137ad614e14565b60009290920b602092830291909101909101526137cb6008826150dc565b6137d6906020614fc2565b935060e08483901b901c8682815181106137f2576137f2614e14565b60209081029190910101528061380781614e40565b91505061373d565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388691906150ad565b905060008080805b600354811015613a2a57600381815481106138ab576138ab614e14565b9060005260206000200154925060005b60088110156139f757806138d0836008614fc2565b6138da9190614faf565b9450600480546138e990614dca565b90508510156139f7576000600486815461390290614dca565b811061391057613910614e14565b81546001161561392f5790600052602060002090602091828204019190065b9054600160f81b911a0260f81c9050600061394b83600761527c565b613956906020614fc2565b63ffffffff811b878116821c965090915061397286848b6133d4565b6004805484199a909a1683861b179992985090945060f885901b918a9061399890614dca565b81106139a6576139a6614e14565b8154600116156139c55790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555050505080806139ef90614e40565b9150506138bb565b508260038281548110613a0c57613a0c614e14565b60009182526020909120015580613a2281614e40565b91505061388e565b5050505050565b600554600160c01b90046001600160401b03166064811015613a505750565b805b4381101561238157600b6000613a6960648461527c565b81526020019081526020016000206000613a839190614613565b600c6000613a9260648461527c565b8152602001908152602001600020600090558080613aaf90614e40565b915050613a52565b600060008051602061574e833981519152613ad783600001516003614296565b613ae2906003614faf565b613aec91906150dc565b613afb83602001516002614296565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c613b7f91906150dc565b90506000613bb8613bb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b856142ee565b90506000613bc687846142ee565b90506000613bd48383614335565b80518651919250148015613bef575080602001518560200151145b611b925760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610ce3565b60008082604051602001613c4f9190614d0e565b6040516020818303038152906040528051906020012090506000805b8651811015613cc757868181518110613c8657613c86614e14565b60200260200101518303613cb557858181518110613ca657613ca6614e14565b60200260200101519150613cc7565b80613cbf81614e40565b915050613c6b565b506001600160a01b038116613d0d5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ce3565b95945050505050565b613d4c828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613c3b565b600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613db282826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250613c3b565b600760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e0882826040518060400160405280600d81526020016c566f746572526567697374727960981b815250613c3b565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e62828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250613c3b565b600960006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613ec882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250613c3b565b600a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f275750600091506003905082613fb1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fa757506000925060019150829050613fb1565b9250600091508190505b9450945094915050565b6000826003811115613fcf57613fcf6156cc565b03613fd8575050565b6001826003811115613fec57613fec6156cc565b0361400a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561401e5761401e6156cc565b0361403f5760405163fce698f760e01b815260048101829052602401610ce3565b6003826003811115614053576140536156cc565b03612381576040516335e2f38360e21b815260048101829052602401610ce3565b600080614082858585614380565b905060008380614094576140946150c6565b858709905080156140a857816001016140aa565b815b9695505050505050565b60006140c38360800151613ab7565b6140cc57600080fd5b6140d98260200151613ab7565b6140e257600080fd5b60006141376140f9856080015185604001516142ee565b614132614128604080518082018252600080825260209182015281518083019092526001825260029082015290565b86606001516142ee565b614335565b845160208087015186516040519495506000946141669493019283526020830191909152604082015260600190565b60405160208183030381529060405290506000614182826144a6565b905060006141a961419b876020015188604001516142ee565b6141328489606001516142ee565b9050600060026141db604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016141fd969594939291906156e2565b60408051601f198184030181529082905261421791615091565b602060405180830381855afa158015614234573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061425791906150ad565b90506142837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826150dc565b6040880151149550505050505092915050565b600060405160208101602081526020808201526020604082015284606082015283608082015260008051602061574e83398151915260a082015260208260c0836005600019fa6142e557600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61432e57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61432e57600080fd5b60008082116143c45760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ce3565b836000036143d457506000612183565b838302838582816143e7576143e76150c6565b0403614405578281816143fc576143fc6150c6565b04915050612183565b506000614412838661519b565b9050600061442084876150dc565b9050600061442e858761519b565b9050600061443c86886150dc565b9050856144498285614fc2565b614453919061519b565b61445d8385614fc2565b6144678387614fc2565b886144728689614fc2565b61447c9190614fc2565b6144869190614faf565b6144909190614faf565b61449a9190614faf565b98975050505050505050565b604080518082019091526000808252602082015260006002836040516144cc9190615091565b602060405180830381855afa1580156144e9573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061450c91906150ad565b9050600061452860008051602061574e833981519152836150dc565b905060005b61453682614569565b90508015614557576040805180820190915291825260208201529392505050565b614562600183614faf565b915061452d565b60008060008051602061574e833981519152614586846003614296565b614591906003614faf565b61459b91906150dc565b905060006145cd8260026145be600160008051602061574e83398151915261527c565b6145c8919061519b565b614296565b90508060011415806145dd575081155b156145ec575060009392505050565b61460b8260046145be60008051602061574e8339815191526001614faf565b949350505050565b508054600082559060005260206000209081019061062791906146b6565b50805461463d90614dca565b6000825580601f1061464d575050565b601f01602090049060005260206000209081019061062791906146b6565b8280548282559060005260206000209081019282156146a6579160200282015b828111156146a657825182559160200191906001019061468b565b506146b29291506146b6565b5090565b5b808211156146b257600081556001016146b7565b6000602082840312156146dd57600080fd5b813560ff8116811461218357600080fd5b6000806020838503121561470157600080fd5b82356001600160401b038082111561471857600080fd5b818501915085601f83011261472c57600080fd5b81358181111561473b57600080fd5b8660208260051b850101111561475057600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b8381101561479257815187529582019590820190600101614776565b509495945050505050565b60008151808452602080850194508084016000805b848110156147d0578251820b885296830196918301916001016147b2565b50959695505050505050565b6060815260006147ef6060830186614762565b8281036020840152614801818661479d565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b8281101561485e5781516001600160581b03191684529284019290840190600101614838565b505050838103828501526148728188614762565b9150508281036040840152614887818661479d565b9150506001600160401b038316606083015295945050505050565b6000602082840312156148b457600080fd5b81356001600160401b038111156148ca57600080fd5b8201610140818503121561218357600080fd5b6000602082840312156148ef57600080fd5b81356001600160e01b03198116811461218357600080fd5b6001600160a01b038116811461062757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156149545761495461491c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156149825761498261491c565b604052919050565b600080600080608085870312156149a057600080fd5b84356149ab81614907565b935060208581013593506040860135925060608601356001600160401b03808211156149d657600080fd5b818801915088601f8301126149ea57600080fd5b8135818111156149fc576149fc61491c565b614a0e601f8201601f1916850161495a565b91508082528984828501011115614a2457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b83811015614a5f578181015183820152602001614a47565b50506000910152565b60008151808452614a80816020860160208601614a44565b601f01601f19169290920160200192915050565b82815260406020820152600061460b6040830184614a68565b600060208284031215614abf57600080fd5b813561218381614907565b60006001600160401b03821115614ae357614ae361491c565b5060051b60200190565b60006020808385031215614b0057600080fd5b82356001600160401b03811115614b1657600080fd5b8301601f81018513614b2757600080fd5b8035614b3a614b3582614aca565b61495a565b81815260059190911b82018301908381019087831115614b5957600080fd5b928401925b82841015614b7757833582529284019290840190614b5e565b979650505050505050565b600082601f830112614b9357600080fd5b81356020614ba3614b3583614aca565b82815260059290921b84018101918181019086841115614bc257600080fd5b8286015b84811015614be6578035614bd981614907565b8352918301918301614bc6565b509695505050505050565b60008060408385031215614c0457600080fd5b82356001600160401b0380821115614c1b57600080fd5b818501915085601f830112614c2f57600080fd5b81356020614c3f614b3583614aca565b82815260059290921b84018101918181019089841115614c5e57600080fd5b948201945b83861015614c7c57853582529482019490820190614c63565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b82565b9150509250929050565b600060208284031215614cbb57600080fd5b5035919050565b6020815260006121836020830184614762565b60008060408385031215614ce857600080fd5b8235614cf381614907565b91506020830135614d0381614907565b809150509250929050565b6020815260006121836020830184614a68565b80516001600160581b031981168114614d3957600080fd5b919050565b60006020808385031215614d5157600080fd5b82516001600160401b03811115614d6757600080fd5b8301601f81018513614d7857600080fd5b8051614d86614b3582614aca565b81815260059190911b82018301908381019087831115614da557600080fd5b928401925b82841015614b7757614dbb84614d21565b82529284019290840190614daa565b600181811c90821680614dde57607f821691505b60208210810361271e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e5257614e52614e2a565b5060010190565b8051600081900b8114614d3957600080fd5b600082601f830112614e7c57600080fd5b81516020614e8c614b3583614aca565b82815260059290921b84018101918181019086841115614eab57600080fd5b8286015b84811015614be657614ec081614e59565b8352918301918301614eaf565b80516001600160401b0381168114614d3957600080fd5b600080600060608486031215614ef957600080fd5b83516001600160401b0380821115614f1057600080fd5b818601915086601f830112614f2457600080fd5b81516020614f34614b3583614aca565b82815260059290921b8401810191818101908a841115614f5357600080fd5b948201945b83861015614f7157855182529482019490820190614f58565b91890151919750909350505080821115614f8a57600080fd5b50614f9786828701614e6b565b925050614fa660408501614ecd565b90509250925092565b808201808211156125b3576125b3614e2a565b80820281158282048414176125b3576125b3614e2a565b6000808335601e19843603018112614ff057600080fd5b8301803591506001600160401b0382111561500a57600080fd5b60200191503681900382131561309c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006140aa60e08301848661501f565b600082516150a3818460208701614a44565b9190910192915050565b6000602082840312156150bf57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826150eb576150eb6150c6565b500690565b600081830360a081121561510357600080fd5b604051608081018181106001600160401b03821117156151255761512561491c565b604090815284358252601f198301121561513e57600080fd5b615146614932565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561519057600080fd5b815161218381614907565b6000826151aa576151aa6150c6565b500490565b6000602082840312156151c157600080fd5b61218382614d21565b805161ffff81168114614d3957600080fd5b600060a082840312156151ee57600080fd5b60405160a081018181106001600160401b03821117156152105761521061491c565b604052825163ffffffff8116811461522757600080fd5b815261523560208401614d21565b602082015260408301518060030b811461524e57600080fd5b604082015261525f606084016151ca565b606082015261527060808401614e59565b60808201529392505050565b818103818111156125b3576125b3614e2a565b63ffffffff82811682821603908082111561432e5761432e614e2a565b6040815260006152bf6040830185614762565b8281036020840152613d0d818561479d565b6000602082840312156152e357600080fd5b815162ffffff8116811461218357600080fd5b60ff81811683821601908111156125b3576125b3614e2a565b60008060006060848603121561532457600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561534f57600080fd5b8151801515811461218357600080fd5b600181815b8085111561539a57816000190482111561538057615380614e2a565b8085161561538d57918102915b93841c9390800290615364565b509250929050565b6000826153b1575060016125b3565b816153be575060006125b3565b81600181146153d457600281146153de576153fa565b60019150506125b3565b60ff8411156153ef576153ef614e2a565b50506001821b6125b3565b5060208310610133831016604e8410600b841016171561541d575081810a6125b3565b615427838361535f565b806000190482111561543b5761543b614e2a565b029392505050565b600061218383836153a2565b601f821115611c7857600081815260208120601f850160051c810160208610156154765750805b601f850160051c820191505b8181101561549557828155600101615482565b505050505050565b81516001600160401b038111156154b6576154b661491c565b6154ca816154c48454614dca565b8461544f565b602080601f8311600181146154ff57600084156154e75750858301515b600019600386901b1c1916600185901b178555615495565b600085815260208120601f198616915b8281101561552e5788860151825594840194600190910190840161550f565b508582101561554c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006140aa60608301848661501f565b6000806000806080858703121561559b57600080fd5b84519350602085015192506155b2604086016151ca565b91506155c0606086016151ca565b905092959194509250565b6001600160401b038311156155e2576155e261491c565b6155f6836155f08354614dca565b8361544f565b6000601f84116001811461562a57600085156156125750838201355b600019600387901b1c1916600186901b178355613a2a565b600083815260209020601f19861690835b8281101561565b578685013582556020948501946001909201910161563b565b50868210156156785760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f821317156125b3576125b3614e2a565b600081810b9083900b01607f8113607f19821217156125b3576125b3614e2a565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e083015283516101008301528381015161012083015282516101408301528201516101608201526101808101614b7756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220b0944797805d97f9d7a9ea9b77c9a650ef2929101a8a365e4d647a134fcbf06764736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063a107753211610130578063e17f212e116100b8578063ef88bf131161007c578063ef88bf131461055e578063f5a9838314610571578063f5f5ba7214610579578063faae7fc9146105a6578063fc79c300146105b957600080fd5b8063e17f212e146104dc578063e22fdece146104f0578063e36da7b7146104f8578063e621dbc714610518578063e8d0e70a1461053757600080fd5b8063be60040e116100ff578063be60040e14610488578063c10f489a1461049b578063c1bff139146104ae578063dcb1476e146104b6578063debfda30146104c957600080fd5b8063a107753214610428578063a14634a71461044f578063abfaf17014610462578063b00c0b761461047557600080fd5b80635ff27079116101be57806370473f2f1161018257806370473f2f146103b157806374e6310e146103c45780637925eaca146103e55780637fe3341a146103f85780638e0e9f7c1461040057600080fd5b80635ff270791461034d57806362354e031461036057806363f921db1461037357806367fc4029146103865780636d0e8c341461039957600080fd5b80634691377f116102055780634691377f146102b4578063470e91df146102cc5780635267a15d146102df5780635a832088146103065780635aa6e6751461034557600080fd5b80630799fe75146102375780630a1660511461025257806329bfe39d1461026757806345a15d3c14610292575b600080fd5b61023f6105cc565b6040519081526020015b60405180910390f35b6102656102603660046146cb565b6105db565b005b60095461027a906001600160a01b031681565b6040516001600160a01b039091168152602001610249565b6102a56102a03660046146ee565b610635565b604051610249939291906147dc565b6102bc610aba565b604051610249949392919061481b565b6102656102da3660046148a2565b610c56565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461027a565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610249565b61027a611225565b61026561035b3660046148dd565b6112bc565b60005461027a906001600160a01b031681565b6102656103813660046146ee565b611542565b6102656103943660046148dd565b611b9c565b6103a1611c7d565b6040519015158152602001610249565b6102656103bf36600461498a565b611fc2565b6103d76103d23660046148dd565b6120c3565b604051610249929190614a94565b60075461027a906001600160a01b031681565b61023f601481565b60055461041490610100900462ffffff1681565b60405162ffffff9091168152602001610249565b61027a7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61045d366004614aad565b612168565b610265610470366004614aed565b61218a565b610265610483366004614bf1565b612385565b60085461027a906001600160a01b031681565b600a5461027a906001600160a01b031681565b61023f606481565b61023f6104c4366004614ca9565b612460565b6103a16104d7366004614aad565b612530565b6000546103a190600160a81b900460ff1681565b6103a16125b9565b61050b610506366004614ca9565b61262d565b6040516102499190614cc2565b6005546105259060ff1681565b60405160ff9091168152602001610249565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b61026561056c366004614cd5565b612724565b61026561288a565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b602082015290516102499190614d0e565b60065461027a906001600160a01b031681565b61023f6105c7366004614ca9565b612950565b60006105d66129e4565b905090565b600054600160b01b900460ff16806105fd5750600054600160a81b900460ff16155b1561062a5761060a612be2565b61061381612c1c565b61061f600d6000614613565b610627612c85565b50565b610627600036612cee565b6060806000836001600160401b038111156106525761065261491c565b60405190808252806020026020018201604052801561067b578160200160208202803683370190505b5060405160048082525491935090600080600019600184160161074857602084206060850152600283049250602089853760208451046020850152828451106106c357600080fd5b602084015160608501510154915060005b888110156107425760208082028b01863760208551049150838551106106f957600080fd5b602085510660408601526020850151821461071f57816020860152816060860151015492505b604085015160080283901b60f81c602082810289010181905291506001016106d4565b50600192505b6001831661079d576002603f84160492915060005b8881101561079b5760208082028b0186378385511061077b57600080fd5b845160080283901b60f81c6020828102890101819052915060010161075d565b505b505050506107a9612e3a565b9050836001600160401b038111156107c3576107c361491c565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50600e546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802606083015260105460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a8110156108ee5760208082028d0187378486511061089c57600080fd5b6008865104915060088651066040870152602086015182146108c9578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c01015260018101905061087e565b506011545b60c08601518114610aac57606086015181016080870181905254945060001960018616016109fd5760206080870181812090526002909504948c87376080865104602087015260048502865110156109545760208601516080870151015493505b60005b8b8110156109f75760208082028e0188376080875104925060048602875110156109ef5760808751066040880152602087015183146109a157826020880152826080880151015494505b604087015160020285901b60fe1c925060001983016109d15760208181028c010180518902607f81901c90915293505b600383036109ef5760208181028c01018051607f1b89810490915293505b600101610957565b50600194505b60018516610a9d576002603f86160494935060208c87376080865104602087015260005b8b811015610a9b5760208082028e0188376004860287511015610a93578651607f166040880181905260020285901b60fe1c92506000198301610a755760208181028c010180518902607f81901c90915293505b60038303610a935760208181028c01018051607f1b89810490915293505b600101610a21565b505b6103e8600182010690506108f3565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c9190810190614d3e565b935060048054610b4b90614dca565b9050845114610b5c57610b5c614dfe565b600084516001600160401b03811115610b7757610b7761491c565b604051908082528060200260200182016040528015610ba0578160200160208202803683370190505b50905060005b8151811015610bdf5780828281518110610bc257610bc2614e14565b602090810291909101015280610bd781614e40565b915050610ba6565b50604051631168574f60e21b815230906345a15d3c90610c03908490600401614cc2565b600060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c489190810190614ee4565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff16610c82838535614faf565b4310610cec5760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8335431015610d535760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610ce3565b600354610d61906008614fc2565b610d6e60c0860186614fd9565b610d7a91506004614fc2565b1115610dd25760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610ce3565b60006002853560208701610de960c0890189614fd9565b604051602001610dfc9493929190615048565b60408051601f1981840301815290829052610e1691615091565b602060405180830381855afa158015610e33573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e5691906150ad565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190610eae83610e9f6101008b01856146cb565b84602001358560400135612e94565b90506001600160a01b038116610f065760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ce3565b600080610f138389612ec2565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906150ad565b81528c356020820152604001600d610fac8d6001614faf565b610fb7908f356150dc565b81548110610fc757610fc7614e14565b6000918252602080832090910154835282810186905260409283018790528e35808352600b8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261103991615091565b602060405180830381855afa158015611056573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107991906150ad565b905060005b8254811015611104578183828154811061109a5761109a614e14565b9060005260206000200154036110f25760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610ce3565b806110fc81614e40565b91505061107e565b5081819080600181540180825580915050600190039060005260206000200160009091909190915055600061114c848f60200180360381019061114791906150f0565b612ff0565b5090508061119c5760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610ce3565b6111b48e8060c001906111af9190614fd9565b6130a3565b436000908152600c602052604081208054600192906111d4908490614faf565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661124757506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061517e565b6112c533612530565b6113015760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610ce3565b6001600160e01b031981166000908152600260205260408120805490910361136b5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b80544210156113bc5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ce3565b60008160010180546113cd90614dca565b80601f01602080910402602001604051908101604052809291908181526020018280546113f990614dca565b80156114465780601f1061141b57610100808354040283529160200191611446565b820191906000526020600020905b81548152906001019060200180831161142957829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506114786001830182614631565b50506000805460ff60b01b1916600160b01b178155604051309061149d908490615091565b6000604051808303816000865af19150503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161153c816130f5565b50505050565b600a546001600160a01b0316331480611573575061155e611225565b6001600160a01b0316336001600160a01b0316145b6115d55760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610ce3565b6115dd613112565b6000805b8281101561163757818484838181106115fc576115fc614e14565b9050602002013511156116255783838281811061161b5761161b614e14565b9050602002013591505b8061162f81614e40565b9150506115e1565b5060006004805461164790614dca565b9150505b8181116116c657600460018180548061166390614dca565b80601f81036116825783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156116b15790600052602060002090602091828204019190065b508190506116be81614e40565b91505061164b565b506003545b6116d660088361519b565b81116116fa57600380546001018155600052806116f281614e40565b9150506116cb565b506004805461170890614dca565b600354909150611719906008614fc2565b101561172757611727614dfe565b6000611731613369565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b291906150ad565b905060008060005b86811015611b9257600a546000906001600160a01b031663931028368a8a858181106117e8576117e8614e14565b905060200201356040518263ffffffff1660e01b815260040161180d91815260200190565b602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906151af565b90506001600160581b0319811661189d5760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610ce3565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906151dc565b9050866014826000015163ffffffff1661192e9190614faf565b1161196a5760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610ce3565b6000816040015160030b136119c15760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610ce3565b6119da816040015163ffffffff168260800151886133d4565b9095509350600060088b8b868181106119f5576119f5614e14565b90506020020135611a06919061519b565b9050600060088c8c87818110611a1e57611a1e614e14565b90506020020135611a2f91906150dc565b611a3a90600761527c565b611a45906020614fc2565b6003805491925063ffffffff831b199189841b91839186908110611a6b57611a6b614e14565b9060005260206000200154161760038481548110611a8b57611a8b614e14565b90600052602060002001819055508660f81b60048e8e89818110611ab157611ab1614e14565b905060200201358154611ac390614dca565b8110611ad157611ad1614e14565b815460011615611af05790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611b2d57611b2d614e14565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b604051611b7292919091825260000b602082015260400190565b60405180910390a450505050508080611b8a90614e40565b9150506117ba565b5050505050505050565b611ba46134b6565b6001600160e01b031981166000908152600260205260408120549003611c0c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611c786001830182614631565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ceb5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b611cf3613112565b6000611cfd613369565b60055490915063ffffffff64010000000090910481169082161115611d9957600080611d27613510565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050611d5760018461528f565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051611d8e9291906152ac565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906152d1565b60055490915062ffffff8083166101009092041614611e4157611e28613818565b6005805463ffffff00191661010062ffffff8416021790555b611e49613a31565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff9092169190911717905550611f0290506129e4565b600554600d90611f169060ff1660016152f6565b60ff16611f24436001614faf565b611f2e91906150dc565b81548110611f3e57611f3e614e14565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb691906150ad565b600e5550600191505090565b600080600083806020019051810190611fdb919061530f565b6040805180820190915289815260208101899052929550909350915061200081613ab7565b61200957600080fd5b604080518082019091528381526020810183905261202681613ab7565b61202f57600080fd5b6040516bffffffffffffffffffffffff1960608b901b1660208201526120b890839060029060340160408051601f198184030181529082905261207191615091565b602060405180830381855afa15801561208e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120b191906150ad565b8784613b02565b505050505050505050565b600260205260009081526040902080546001820180549192916120e590614dca565b80601f016020809104026020016040519081016040528092919081815260200182805461211190614dca565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b5050505050905082565b600554600090612183908390610100900462ffffff16612ec2565b9392505050565b600a546001600160a01b031633146121e45760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610ce3565b6121ec613112565b60005b8151811015612381576000600883838151811061220e5761220e614e14565b6020026020010151612220919061519b565b90506000600884848151811061223857612238614e14565b602002602001015161224a91906150dc565b61225590600761527c565b612260906020614fc2565b6003805491925063ffffffff831b19918291908590811061228357612283614e14565b906000526020600020015416600384815481106122a2576122a2614e14565b9060005260206000200181905550600060f81b60048686815181106122c9576122c9614e14565b602002602001015181546122dc90614dca565b81106122ea576122ea614e14565b8154600116156123095790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061233757612337614e14565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061237990614e40565b9150506121ef565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146123fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ce3565b61245661243283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613c3b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6123818282613d16565b600061246d436001614faf565b821115801561248a57506005546124879060ff1683614faf565b43105b6124ed5760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b6064820152608401610ce3565b600554600d906125019060ff1660016152f6565b61250e9060ff16846150dc565b8154811061251e5761251e614e14565b90600052602060002001549050919050565b60008054600160a01b900460ff1680156125b35750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b3919061533d565b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126275760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b50600090565b6060606482111580156126405750438211155b6126835760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b6044820152606401610ce3565b816001600160401b0381111561269b5761269b61491c565b6040519080825280602002602001820160405280156126c4578160200160208202803683370190505b50905060005b8281101561271e57600c60006126e0834361527c565b81526020019081526020016000205482828151811061270157612701614e14565b60209081029190910101528061271681614e40565b9150506126ca565b50919050565b600054600160a01b900460ff16156127755760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ce3565b6001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ce3565b6001600160a01b0381166128145760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ce3565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6128926134b6565b600054600160a81b900460ff16156128ec5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ce3565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b60004361295e606484614faf565b11801561296b5750438211155b6129d15760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b6064820152608401610ce3565b506000908152600c602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e91906150ad565b90506078600c612a6e8183614faf565b612a7a9061010061527c565b612a85906002614fc2565b612a8f919061527c565b612a99919061527c565b81612aa6600c6078614faf565b612ab29061010061527c565b612abd906002614fc2565b60008051602061574e833981519152901c612ad89190614fc2565b901b9150612ae8600c6078614faf565b612af49061010061527c565b612b00600c6078614faf565b612b0a919061527c565b816001612b19600c6078614faf565b612b259061010061527c565b612b30906002615443565b612b3a919061527c565b612b46600c6078614faf565b612b529061010061527c565b60008051602061574e833981519152901c16612b6e9190614fc2565b612b79911c83614faf565b9150612b87600c6078614faf565b816001612b96600c6078614faf565b612ba29061010061527c565b612bad906002615443565b612bb7919061527c565b60008051602061574e83398151915216612bd19190614fc2565b612bdc911c83614faf565b91505090565b600054600160b01b900460ff1615612c1257333014612c0357612c03614dfe565b6000805460ff60b01b19169055565b612c1a6134b6565b565b60648160ff1610612c6f5760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401610ce3565b6005805460ff191660ff92909216919091179055565b600554612c969060ff1660016152f6565b60ff166001600160401b03811115612cb057612cb061491c565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b50805161062791600d9160209091019061466b565b612cf66134b6565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6691906150ad565b90506000612d748242614faf565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612df2908261549d565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051612e2b949392919061555c565b60405180910390a15050505050565b600060105460115403612e6357506005546801000000000000000090046001600160401b031690565b436000908152600c602052604090205415612e7d57504290565b50600554600160801b90046001600160401b031690565b600080600080612ea688888888613eec565b925092509250612eb68282613fbb565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa158015612f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f559190615585565b9296509094509250905083151580612f6c57508215155b612fb85760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f742072656769737465726564000000000000006044820152606401610ce3565b60408051808201909152848152602081018490529550612fe361ffff80841690611000908416614074565b9450505050509250929050565b60008083606001518360000151106130705760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610ce3565b600061307c85856140b4565b602085015151909150818015613096575085604001518111155b93509150505b9250929050565b8181600f601054815481106130ba576130ba614e14565b9060005260206000200191826130d19291906155cb565b506103e860105460016130e49190614faf565b6130ee91906150dc565b6010555050565b3d604051818101604052816000823e821561310e578181f35b8181fd5b61311a612e3a565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600e549050604051602081016040820160608301601054608085015260008060008060008060038752602087208752600f89526011545b60808b015181146133535760208a208101808a52549150600019600183160161328a5760208920895260028204915060005b6001602060018503040181101561328457808a510154935060005b61010081101561327b5783600882046020840201101561327b576010810460108302018a51015497506000955060005b60088110156132655760208181028a901b60e01c9850830260088304018511156132465785821b60fe1c99506000198a0161323357968e02607f1c965b60038a0361324657607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016131f6565b508560108083030460108402018b5101556131c6565b506001016131ab565b50600191505b60018216613344579091506002603f8316049060005b610100811015613342578260088204101561334257601081048951015496506000945060005b6008811015613331576020810288901b60e01c9650600882048411156133125784821b60fe1c985060001989016132ff57958d02607f1c955b6003890361331257607f9690961b8d9004955b6020810260e0039690961b9594861794600291909101906001016132c6565b50846010808303048a5101556132a0565b505b6103e860018201069050613179565b5050505050505050505060808101516011555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426133ca919061527c565b6105d6919061519b565b600080846000036133e95750839050826134ae565b8484601d82901c158015906134025750607f198160000b135b1561342257613412600a8361519b565b915061341f60018261568a565b90505b6000607f6134308785614fc2565b901c90506000613440848361527c565b90505b600381901c1580156134585750607f8360000b125b80156134665750601c84901c155b156134a65761347684600a614fc2565b93506134838360016156ab565b9250607f6134918886614fc2565b901c915061349f848361527c565b9050613443565b509193509150505b935093915050565b6134be611225565b6001600160a01b0316336001600160a01b031614612c1a5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ce3565b6060806004805461352090614dca565b90506001600160401b038111156135395761353961491c565b604051908082528060200260200182016040528015613562578160200160208202803683370190505b5091506004805461357290614dca565b90506001600160401b0381111561358b5761358b61491c565b6040519080825280602002602001820160405280156135b4578160200160208202803683370190505b5090506000806008600480546135c990614dca565b6135d492915061519b565b905060005b818110156136ed576000600382815481106135f6576135f6614e14565b600091825260208220015491505b60088110156136d85760008161361b856008614fc2565b6136259190614faf565b9050600481815461363590614dca565b811061364357613643614e14565b8154600116156136625790600052602060002090602091828204019190065b9054901a600160f81b0260f81c87828151811061368157613681614e14565b60009290920b60209283029190910182015261369e908390614fc2565b955060e08684901b901c8882815181106136ba576136ba614e14565b602090810291909101015250806136d081614e40565b915050613604565b505080806136e590614e40565b9150506135d9565b506008600480546136fd90614dca565b6137089291506150dc565b156138125760006003828154811061372257613722614e14565b6000918252602082200154915061373a836008614fc2565b90505b6004805461374a90614dca565b905081101561380f57600481815461376190614dca565b811061376f5761376f614e14565b81546001161561378e5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106137ad576137ad614e14565b60009290920b602092830291909101909101526137cb6008826150dc565b6137d6906020614fc2565b935060e08483901b901c8682815181106137f2576137f2614e14565b60209081029190910101528061380781614e40565b91505061373d565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388691906150ad565b905060008080805b600354811015613a2a57600381815481106138ab576138ab614e14565b9060005260206000200154925060005b60088110156139f757806138d0836008614fc2565b6138da9190614faf565b9450600480546138e990614dca565b90508510156139f7576000600486815461390290614dca565b811061391057613910614e14565b81546001161561392f5790600052602060002090602091828204019190065b9054600160f81b911a0260f81c9050600061394b83600761527c565b613956906020614fc2565b63ffffffff811b878116821c965090915061397286848b6133d4565b6004805484199a909a1683861b179992985090945060f885901b918a9061399890614dca565b81106139a6576139a6614e14565b8154600116156139c55790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555050505080806139ef90614e40565b9150506138bb565b508260038281548110613a0c57613a0c614e14565b60009182526020909120015580613a2281614e40565b91505061388e565b5050505050565b600554600160c01b90046001600160401b03166064811015613a505750565b805b4381101561238157600b6000613a6960648461527c565b81526020019081526020016000206000613a839190614613565b600c6000613a9260648461527c565b8152602001908152602001600020600090558080613aaf90614e40565b915050613a52565b600060008051602061574e833981519152613ad783600001516003614296565b613ae2906003614faf565b613aec91906150dc565b613afb83602001516002614296565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c613b7f91906150dc565b90506000613bb8613bb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b856142ee565b90506000613bc687846142ee565b90506000613bd48383614335565b80518651919250148015613bef575080602001518560200151145b611b925760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610ce3565b60008082604051602001613c4f9190614d0e565b6040516020818303038152906040528051906020012090506000805b8651811015613cc757868181518110613c8657613c86614e14565b60200260200101518303613cb557858181518110613ca657613ca6614e14565b60200260200101519150613cc7565b80613cbf81614e40565b915050613c6b565b506001600160a01b038116613d0d5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ce3565b95945050505050565b613d4c828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613c3b565b600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613db282826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250613c3b565b600760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e0882826040518060400160405280600d81526020016c566f746572526567697374727960981b815250613c3b565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e62828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250613c3b565b600960006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613ec882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250613c3b565b600a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f275750600091506003905082613fb1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fa757506000925060019150829050613fb1565b9250600091508190505b9450945094915050565b6000826003811115613fcf57613fcf6156cc565b03613fd8575050565b6001826003811115613fec57613fec6156cc565b0361400a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561401e5761401e6156cc565b0361403f5760405163fce698f760e01b815260048101829052602401610ce3565b6003826003811115614053576140536156cc565b03612381576040516335e2f38360e21b815260048101829052602401610ce3565b600080614082858585614380565b905060008380614094576140946150c6565b858709905080156140a857816001016140aa565b815b9695505050505050565b60006140c38360800151613ab7565b6140cc57600080fd5b6140d98260200151613ab7565b6140e257600080fd5b60006141376140f9856080015185604001516142ee565b614132614128604080518082018252600080825260209182015281518083019092526001825260029082015290565b86606001516142ee565b614335565b845160208087015186516040519495506000946141669493019283526020830191909152604082015260600190565b60405160208183030381529060405290506000614182826144a6565b905060006141a961419b876020015188604001516142ee565b6141328489606001516142ee565b9050600060026141db604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016141fd969594939291906156e2565b60408051601f198184030181529082905261421791615091565b602060405180830381855afa158015614234573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061425791906150ad565b90506142837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826150dc565b6040880151149550505050505092915050565b600060405160208101602081526020808201526020604082015284606082015283608082015260008051602061574e83398151915260a082015260208260c0836005600019fa6142e557600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61432e57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61432e57600080fd5b60008082116143c45760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ce3565b836000036143d457506000612183565b838302838582816143e7576143e76150c6565b0403614405578281816143fc576143fc6150c6565b04915050612183565b506000614412838661519b565b9050600061442084876150dc565b9050600061442e858761519b565b9050600061443c86886150dc565b9050856144498285614fc2565b614453919061519b565b61445d8385614fc2565b6144678387614fc2565b886144728689614fc2565b61447c9190614fc2565b6144869190614faf565b6144909190614faf565b61449a9190614faf565b98975050505050505050565b604080518082019091526000808252602082015260006002836040516144cc9190615091565b602060405180830381855afa1580156144e9573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061450c91906150ad565b9050600061452860008051602061574e833981519152836150dc565b905060005b61453682614569565b90508015614557576040805180820190915291825260208201529392505050565b614562600183614faf565b915061452d565b60008060008051602061574e833981519152614586846003614296565b614591906003614faf565b61459b91906150dc565b905060006145cd8260026145be600160008051602061574e83398151915261527c565b6145c8919061519b565b614296565b90508060011415806145dd575081155b156145ec575060009392505050565b61460b8260046145be60008051602061574e8339815191526001614faf565b949350505050565b508054600082559060005260206000209081019061062791906146b6565b50805461463d90614dca565b6000825580601f1061464d575050565b601f01602090049060005260206000209081019061062791906146b6565b8280548282559060005260206000209081019282156146a6579160200282015b828111156146a657825182559160200191906001019061468b565b506146b29291506146b6565b5090565b5b808211156146b257600081556001016146b7565b6000602082840312156146dd57600080fd5b813560ff8116811461218357600080fd5b6000806020838503121561470157600080fd5b82356001600160401b038082111561471857600080fd5b818501915085601f83011261472c57600080fd5b81358181111561473b57600080fd5b8660208260051b850101111561475057600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b8381101561479257815187529582019590820190600101614776565b509495945050505050565b60008151808452602080850194508084016000805b848110156147d0578251820b885296830196918301916001016147b2565b50959695505050505050565b6060815260006147ef6060830186614762565b8281036020840152614801818661479d565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b8281101561485e5781516001600160581b03191684529284019290840190600101614838565b505050838103828501526148728188614762565b9150508281036040840152614887818661479d565b9150506001600160401b038316606083015295945050505050565b6000602082840312156148b457600080fd5b81356001600160401b038111156148ca57600080fd5b8201610140818503121561218357600080fd5b6000602082840312156148ef57600080fd5b81356001600160e01b03198116811461218357600080fd5b6001600160a01b038116811461062757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156149545761495461491c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156149825761498261491c565b604052919050565b600080600080608085870312156149a057600080fd5b84356149ab81614907565b935060208581013593506040860135925060608601356001600160401b03808211156149d657600080fd5b818801915088601f8301126149ea57600080fd5b8135818111156149fc576149fc61491c565b614a0e601f8201601f1916850161495a565b91508082528984828501011115614a2457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b83811015614a5f578181015183820152602001614a47565b50506000910152565b60008151808452614a80816020860160208601614a44565b601f01601f19169290920160200192915050565b82815260406020820152600061460b6040830184614a68565b600060208284031215614abf57600080fd5b813561218381614907565b60006001600160401b03821115614ae357614ae361491c565b5060051b60200190565b60006020808385031215614b0057600080fd5b82356001600160401b03811115614b1657600080fd5b8301601f81018513614b2757600080fd5b8035614b3a614b3582614aca565b61495a565b81815260059190911b82018301908381019087831115614b5957600080fd5b928401925b82841015614b7757833582529284019290840190614b5e565b979650505050505050565b600082601f830112614b9357600080fd5b81356020614ba3614b3583614aca565b82815260059290921b84018101918181019086841115614bc257600080fd5b8286015b84811015614be6578035614bd981614907565b8352918301918301614bc6565b509695505050505050565b60008060408385031215614c0457600080fd5b82356001600160401b0380821115614c1b57600080fd5b818501915085601f830112614c2f57600080fd5b81356020614c3f614b3583614aca565b82815260059290921b84018101918181019089841115614c5e57600080fd5b948201945b83861015614c7c57853582529482019490820190614c63565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b82565b9150509250929050565b600060208284031215614cbb57600080fd5b5035919050565b6020815260006121836020830184614762565b60008060408385031215614ce857600080fd5b8235614cf381614907565b91506020830135614d0381614907565b809150509250929050565b6020815260006121836020830184614a68565b80516001600160581b031981168114614d3957600080fd5b919050565b60006020808385031215614d5157600080fd5b82516001600160401b03811115614d6757600080fd5b8301601f81018513614d7857600080fd5b8051614d86614b3582614aca565b81815260059190911b82018301908381019087831115614da557600080fd5b928401925b82841015614b7757614dbb84614d21565b82529284019290840190614daa565b600181811c90821680614dde57607f821691505b60208210810361271e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e5257614e52614e2a565b5060010190565b8051600081900b8114614d3957600080fd5b600082601f830112614e7c57600080fd5b81516020614e8c614b3583614aca565b82815260059290921b84018101918181019086841115614eab57600080fd5b8286015b84811015614be657614ec081614e59565b8352918301918301614eaf565b80516001600160401b0381168114614d3957600080fd5b600080600060608486031215614ef957600080fd5b83516001600160401b0380821115614f1057600080fd5b818601915086601f830112614f2457600080fd5b81516020614f34614b3583614aca565b82815260059290921b8401810191818101908a841115614f5357600080fd5b948201945b83861015614f7157855182529482019490820190614f58565b91890151919750909350505080821115614f8a57600080fd5b50614f9786828701614e6b565b925050614fa660408501614ecd565b90509250925092565b808201808211156125b3576125b3614e2a565b80820281158282048414176125b3576125b3614e2a565b6000808335601e19843603018112614ff057600080fd5b8301803591506001600160401b0382111561500a57600080fd5b60200191503681900382131561309c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006140aa60e08301848661501f565b600082516150a3818460208701614a44565b9190910192915050565b6000602082840312156150bf57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826150eb576150eb6150c6565b500690565b600081830360a081121561510357600080fd5b604051608081018181106001600160401b03821117156151255761512561491c565b604090815284358252601f198301121561513e57600080fd5b615146614932565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561519057600080fd5b815161218381614907565b6000826151aa576151aa6150c6565b500490565b6000602082840312156151c157600080fd5b61218382614d21565b805161ffff81168114614d3957600080fd5b600060a082840312156151ee57600080fd5b60405160a081018181106001600160401b03821117156152105761521061491c565b604052825163ffffffff8116811461522757600080fd5b815261523560208401614d21565b602082015260408301518060030b811461524e57600080fd5b604082015261525f606084016151ca565b606082015261527060808401614e59565b60808201529392505050565b818103818111156125b3576125b3614e2a565b63ffffffff82811682821603908082111561432e5761432e614e2a565b6040815260006152bf6040830185614762565b8281036020840152613d0d818561479d565b6000602082840312156152e357600080fd5b815162ffffff8116811461218357600080fd5b60ff81811683821601908111156125b3576125b3614e2a565b60008060006060848603121561532457600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561534f57600080fd5b8151801515811461218357600080fd5b600181815b8085111561539a57816000190482111561538057615380614e2a565b8085161561538d57918102915b93841c9390800290615364565b509250929050565b6000826153b1575060016125b3565b816153be575060006125b3565b81600181146153d457600281146153de576153fa565b60019150506125b3565b60ff8411156153ef576153ef614e2a565b50506001821b6125b3565b5060208310610133831016604e8410600b841016171561541d575081810a6125b3565b615427838361535f565b806000190482111561543b5761543b614e2a565b029392505050565b600061218383836153a2565b601f821115611c7857600081815260208120601f850160051c810160208610156154765750805b601f850160051c820191505b8181101561549557828155600101615482565b505050505050565b81516001600160401b038111156154b6576154b661491c565b6154ca816154c48454614dca565b8461544f565b602080601f8311600181146154ff57600084156154e75750858301515b600019600386901b1c1916600185901b178555615495565b600085815260208120601f198616915b8281101561552e5788860151825594840194600190910190840161550f565b508582101561554c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006140aa60608301848661501f565b6000806000806080858703121561559b57600080fd5b84519350602085015192506155b2604086016151ca565b91506155c0606086016151ca565b905092959194509250565b6001600160401b038311156155e2576155e261491c565b6155f6836155f08354614dca565b8361544f565b6000601f84116001811461562a57600085156156125750838201355b600019600387901b1c1916600186901b178355613a2a565b600083815260209020601f19861690835b8281101561565b578685013582556020948501946001909201910161563b565b50868210156156785760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f821317156125b3576125b3614e2a565b600081810b9083900b01607f8113607f19821217156125b3576125b3614e2a565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e083015283516101008301528381015161012083015282516101408301528201516101608201526101808101614b7756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220b0944797805d97f9d7a9ea9b77c9a650ef2929101a8a365e4d647a134fcbf06764736f6c63430008140033", + "bytecode": "0x60e06040526001607f1b600f553480156200001957600080fd5b506040516200682a3803806200682a8339810160408190526200003c91620005aa565b8487876200004b8282620001d1565b50620000779050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000c85760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200011d5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000bf565b6001600160a01b03841660c05263ffffffff831660805260ff821660a0526200014562000346565b6005805463ffffffff929092166401000000000263ffffffff60201b1990921691909117905562000176816200037e565b62000180620003e9565b604080516101f4808252613ea0820190925290816020015b6060815260200190600190039081620001985750508051620001c3916010916020909101906200045d565b505050505050505062000837565b600054600160a01b900460ff16156200022d5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620002855760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b038116620002d05760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b600060a0516001600160401b03166080516001600160401b0316426200036d919062000681565b6200037991906200069d565b905090565b60648160ff1610620003d35760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401620000bf565b6005805460ff191660ff92909216919091179055565b600554620003fc9060ff166001620006c0565b60ff166001600160401b0381111562000419576200041962000655565b60405190808252806020026020018201604052801562000443578160200160208202803683370190505b5080516200045a91600e91602090910190620004ba565b50565b828054828255906000526020600020908101928215620004a8579160200282015b82811115620004a857825182906200049790826200076b565b50916020019190600101906200047e565b50620004b692915062000506565b5090565b828054828255906000526020600020908101928215620004f8579160200282015b82811115620004f8578251825591602001919060010190620004db565b50620004b692915062000527565b80821115620004b65760006200051d82826200053e565b5060010162000506565b5b80821115620004b6576000815560010162000528565b5080546200054c90620006dc565b6000825580601f106200055d575050565b601f0160209004906000526020600020908101906200045a919062000527565b6001600160a01b03811681146200045a57600080fd5b805160ff81168114620005a557600080fd5b919050565b600080600080600080600060e0888a031215620005c657600080fd5b8751620005d3816200057d565b6020890151909750620005e6816200057d565b6040890151909650620005f9816200057d565b60608901519095506200060c816200057d565b608089015190945063ffffffff811681146200062757600080fd5b92506200063760a0890162000593565b91506200064760c0890162000593565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156200069757620006976200066b565b92915050565b600082620006bb57634e487b7160e01b600052601260045260246000fd5b500490565b60ff81811683821601908111156200069757620006976200066b565b600181811c90821680620006f157607f821691505b6020821081036200071257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076657600081815260208120601f850160051c81016020861015620007415750805b601f850160051c820191505b8181101562000762578281556001016200074d565b5050505b505050565b81516001600160401b0381111562000787576200078762000655565b6200079f81620007988454620006dc565b8462000718565b602080601f831160018114620007d75760008415620007be5750858301515b600019600386901b1c1916600185901b17855562000762565b600085815260208120601f198616915b828110156200080857888601518255948401946001909101908401620007e7565b5085821015620008275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051615fa76200088360003960008181610563015281816121440152612afa015260008181610383015261393301526000818161077b015261395d0152615fa76000f3fe60806040526004361061025c5760003560e01c8063a14634a711610144578063e17f212e116100b6578063ef88bf131161007a578063ef88bf131461079d578063f5a98383146107bd578063f5f5ba72146107d2578063faae7fc91461080c578063fbe532341461082c578063fc79c3001461084c57600080fd5b8063e17f212e146106da578063e22fdece146106fb578063e36da7b714610710578063e621dbc71461073d578063e8d0e70a1461076957600080fd5b8063be60040e11610108578063be60040e14610625578063c10f489a14610645578063c1bff13914610665578063dcb1476e1461067a578063de53fcd51461069a578063debfda30146106ba57600080fd5b8063a14634a714610585578063abfaf170146105a5578063b00c0b76146105c5578063b00eb9fe146105e5578063b3d2fc941461060557600080fd5b806362354e03116101dd57806370473f2f116101a157806370473f2f1461049957806374e6310e146104b95780637925eaca146104e75780637fe3341a146105075780638e0e9f7c1461051c578063a10775321461055157600080fd5b806362354e03146103f2578063623d12971461041257806363f921db1461043457806367fc4029146104545780636d0e8c341461047457600080fd5b8063470e91df11610224578063470e91df1461031d5780635267a15d1461033d5780635a832088146103715780635aa6e675146103bd5780635ff27079146103d257600080fd5b80630799fe75146102615780630a1660511461028957806329bfe39d146102ab57806345a15d3c146102e35780634691377f14610305575b600080fd5b34801561026d57600080fd5b5061027661086c565b6040519081526020015b60405180910390f35b34801561029557600080fd5b506102a96102a4366004614e2e565b61087b565b005b3480156102b757600080fd5b506009546102cb906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102f66102f1366004614e95565b6108d5565b60405161028093929190614f50565b61030d610f10565b6040516102809493929190614f8f565b34801561032957600080fd5b506102a9610338366004615016565b6110b0565b34801561034957600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102cb565b34801561037d57600080fd5b506103a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610280565b3480156103c957600080fd5b506102cb61167a565b3480156103de57600080fd5b506102a96103ed366004615051565b611711565b3480156103fe57600080fd5b506000546102cb906001600160a01b031681565b34801561041e57600080fd5b50610427611997565b604051610280919061507b565b34801561044057600080fd5b506102a961044f366004614e95565b6119fc565b34801561046057600080fd5b506102a961046f366004615051565b612056565b34801561048057600080fd5b50610489612137565b6040519015158152602001610280565b3480156104a557600080fd5b506102a96104b436600461513f565b61247c565b3480156104c557600080fd5b506104d96104d4366004615051565b61257d565b604051610280929190615249565b3480156104f357600080fd5b506007546102cb906001600160a01b031681565b34801561051357600080fd5b50610276601481565b34801561052857600080fd5b5060055461053d90610100900462ffffff1681565b60405162ffffff9091168152602001610280565b34801561055d57600080fd5b506102cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059157600080fd5b506102766105a0366004615262565b612622565b3480156105b157600080fd5b506102a96105c03660046152a2565b612644565b3480156105d157600080fd5b506102a96105e03660046153a6565b61283f565b3480156105f157600080fd5b50600b546102cb906001600160a01b031681565b34801561061157600080fd5b506102a9610620366004614e95565b61291a565b34801561063157600080fd5b506008546102cb906001600160a01b031681565b34801561065157600080fd5b50600a546102cb906001600160a01b031681565b34801561067157600080fd5b50610276606481565b34801561068657600080fd5b5061027661069536600461545e565b612994565b3480156106a657600080fd5b506015546102cb906001600160a01b031681565b3480156106c657600080fd5b506104896106d5366004615262565b612a64565b3480156106e657600080fd5b5060005461048990600160a81b900460ff1681565b34801561070757600080fd5b50610489612aed565b34801561071c57600080fd5b5061073061072b36600461545e565b612b61565b6040516102809190615477565b34801561074957600080fd5b506005546107579060ff1681565b60405160ff9091168152602001610280565b34801561077557600080fd5b506103a57f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a957600080fd5b506102a96107b836600461548a565b612c58565b3480156107c957600080fd5b506102a9612dbe565b3480156107de57600080fd5b50604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b6020820152905161028091906154c3565b34801561081857600080fd5b506006546102cb906001600160a01b031681565b34801561083857600080fd5b506102a9610847366004615262565b612e84565b34801561085857600080fd5b5061027661086736600461545e565b612f16565b6000610876612faa565b905090565b600054600160b01b900460ff168061089d5750600054600160a81b900460ff16155b156108ca576108aa6131a8565b6108b3816131e2565b6108bf600e6000614d76565b6108c761324b565b50565b6108c76000366132b4565b3360009081526014602052604081205460609182918103610a5057600b54604051630e2f54db60e41b81526000916001600160a01b03169063e2f54db09061092390899089906004016154d6565b602060405180830381865afa158015610940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610964919061550f565b9050803410156109a95760405162461bcd60e51b815260206004820152600b60248201526a746f6f206c6f772066656560a81b60448201526064015b60405180910390fd5b3415610a4a576015546040516000916001600160a01b03169083908381818185875af1925050503d80600081146109fc576040519150601f19603f3d011682016040523d82523d6000602084013e610a01565b606091505b5050905080610a485760405162461bcd60e51b8152602060048201526013602482015272199959481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016109a0565b505b50610a90565b3415610a905760405162461bcd60e51b815260206004820152600f60248201526e1b9bc819995948195e1c1958dd1959608a1b60448201526064016109a0565b836001600160401b03811115610aa857610aa86150d1565b604051908082528060200260200182016040528015610ad1578160200160208202803683370190505b50604051600480825254919350906000806000196001841601610b9e5760208420606085015260028304925060208985376020845104602085015282845110610b1957600080fd5b602084015160608501510154915060005b88811015610b985760208082028b0186376020855104915083855110610b4f57600080fd5b6020855106604086015260208501518214610b7557816020860152816060860151015492505b604085015160080283901b60f81c60208281028901018190529150600101610b2a565b50600192505b60018316610bf3576002603f84160492915060005b88811015610bf15760208082028b01863783855110610bd157600080fd5b845160080283901b60f81c60208281028901018190529150600101610bb3565b505b50505050610bff613400565b9050836001600160401b03811115610c1957610c196150d1565b604051908082528060200260200182016040528015610c42578160200160208202803683370190505b50600f546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672606083015260115460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a811015610d445760208082028d01873784865110610cf257600080fd5b600886510491506008865106604087015260208601518214610d1f578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c010152600181019050610cd4565b506012545b60c08601518114610f025760608601518101608087018190525494506000196001861601610e535760206080870181812090526002909504948c8737608086510460208701526004850286511015610daa5760208601516080870151015493505b60005b8b811015610e4d5760208082028e018837608087510492506004860287511015610e45576080875106604088015260208701518314610df757826020880152826080880151015494505b604087015160020285901b60fe1c92506000198301610e275760208181028c010180518902607f81901c90915293505b60038303610e455760208181028c01018051607f1b89810490915293505b600101610dad565b50600194505b60018516610ef3576002603f86160494935060208c87376080865104602087015260005b8b811015610ef15760208082028e0188376004860287511015610ee9578651607f166040880181905260020285901b60fe1c92506000198301610ecb5760208181028c010180518902607f81901c90915293505b60038303610ee95760208181028c01018051607f1b89810490915293505b600101610e77565b505b6101f460018201069050610d49565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f929190810190615545565b935060048054610fa1906155d1565b9050845114610fb257610fb2615605565b600084516001600160401b03811115610fcd57610fcd6150d1565b604051908082528060200260200182016040528015610ff6578160200160208202803683370190505b50905060005b815181101561103557808282815181106110185761101861561b565b60209081029190910101528061102d81615647565b915050610ffc565b50604051631168574f60e21b815230906345a15d3c90349061105b908590600401615477565b60006040518083038185885af1158015611079573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526110a291908101906156eb565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff166110dc8385356157b6565b43106111415760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084016109a0565b83354310156111a85760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b60648201526084016109a0565b6003546111b69060086157c9565b6111c360c08601866157e0565b6111cf915060046157c9565b11156112275760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b60648201526084016109a0565b6000600285356020870161123e60c08901896157e0565b604051602001611251949392919061584f565b60408051601f198184030181529082905261126b91615898565b602060405180830381855afa158015611288573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112ab919061550f565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190611303836112f46101008b0185614e2e565b8460200135856040013561345a565b90506001600160a01b03811661135b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109a0565b6000806113688389613488565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e8919061550f565b81528c356020820152604001600e6114018d60016157b6565b61140c908f356158ca565b8154811061141c5761141c61561b565b6000918252602080832090910154835282810186905260409283018790528e35808352600c8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261148e91615898565b602060405180830381855afa1580156114ab573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114ce919061550f565b905060005b825481101561155957818382815481106114ef576114ef61561b565b9060005260206000200154036115475760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f7669646564000000000060448201526064016109a0565b8061155181615647565b9150506114d3565b508181908060018154018082558091505060019003906000526020600020016000909190919091505560006115a1848f60200180360381019061159c91906158de565b6135b6565b509050806115f15760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c696400000000000000000060448201526064016109a0565b6116098e8060c0019061160491906157e0565b613669565b436000908152600d602052604081208054600192906116299084906157b6565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661169c57506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610876919061596c565b61171a33612a64565b6117565760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016109a0565b6001600160e01b03198116600090815260026020526040812080549091036117c05760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016109a0565b80544210156118115760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016109a0565b6000816001018054611822906155d1565b80601f016020809104026020016040519081016040528092919081815260200182805461184e906155d1565b801561189b5780601f106118705761010080835404028352916020019161189b565b820191906000526020600020905b81548152906001019060200180831161187e57829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506118cd6001830182614d94565b50506000805460ff60b01b1916600160b01b17815560405130906118f2908490615898565b6000604051808303816000865af19150503d806000811461192f576040519150601f19603f3d011682016040523d82523d6000602084013e611934565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1611991816136bb565b50505050565b606060136000018054806020026020016040519081016040528092919081815260200182805480156119f257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116119d4575b5050505050905090565b600a546001600160a01b0316331480611a2d5750611a1861167a565b6001600160a01b0316336001600160a01b0316145b611a8f5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b60648201526084016109a0565b611a976136d8565b6000805b82811015611af15781848483818110611ab657611ab661561b565b905060200201351115611adf57838382818110611ad557611ad561561b565b9050602002013591505b80611ae981615647565b915050611a9b565b50600060048054611b01906155d1565b9150505b818111611b80576004600181805480611b1d906155d1565b80601f8103611b3c5783600052602060002060ff1984168155603f9350505b50600282018355600181019250505003815460011615611b6b5790600052602060002090602091828204019190065b50819050611b7881615647565b915050611b05565b506003545b611b90600883615989565b8111611bb45760038054600101815560005280611bac81615647565b915050611b85565b5060048054611bc2906155d1565b600354909150611bd39060086157c9565b1015611be157611be1615605565b6000611beb61392f565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6c919061550f565b905060008060005b8681101561204c57600a546000906001600160a01b031663931028368a8a85818110611ca257611ca261561b565b905060200201356040518263ffffffff1660e01b8152600401611cc791815260200190565b602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d08919061599d565b90506001600160581b03198116611d575760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b60448201526064016109a0565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce91906159ca565b9050866014826000015163ffffffff16611de891906157b6565b11611e245760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b60448201526064016109a0565b6000816040015160030b13611e7b5760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e65676174697665000000000060448201526064016109a0565b611e94816040015163ffffffff1682608001518861399a565b9095509350600060088b8b86818110611eaf57611eaf61561b565b90506020020135611ec09190615989565b9050600060088c8c87818110611ed857611ed861561b565b90506020020135611ee991906158ca565b611ef4906007615a6a565b611eff9060206157c9565b6003805491925063ffffffff831b199189841b91839186908110611f2557611f2561561b565b9060005260206000200154161760038481548110611f4557611f4561561b565b90600052602060002001819055508660f81b60048e8e89818110611f6b57611f6b61561b565b905060200201358154611f7d906155d1565b8110611f8b57611f8b61561b565b815460011615611faa5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611fe757611fe761561b565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b60405161202c92919091825260000b602082015260400190565b60405180910390a45050505050808061204490615647565b915050611c74565b5050505050505050565b61205e613a7c565b6001600160e01b0319811660009081526002602052604081205490036120c65760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016109a0565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906121326001830182614d94565b505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a55760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b60448201526064016109a0565b6121ad6136d8565b60006121b761392f565b60055490915063ffffffff64010000000090910481169082161115612253576000806121e1613ad6565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050612211600184615a7d565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051612248929190615a9a565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa15801561229d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c19190615abf565b60055490915062ffffff80831661010090920416146122fb576122e2613dde565b6005805463ffffff00191661010062ffffff8416021790555b612303613ff7565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff90921691909117179055506123bc9050612faa565b600554600e906123d09060ff166001615ae4565b60ff166123de4360016157b6565b6123e891906158ca565b815481106123f8576123f861561b565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa15801561244c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612470919061550f565b600f5550600191505090565b6000806000838060200190518101906124959190615afd565b604080518082019091528981526020810189905292955090935091506124ba8161407d565b6124c357600080fd5b60408051808201909152838152602081018390526124e08161407d565b6124e957600080fd5b6040516bffffffffffffffffffffffff1960608b901b16602082015261257290839060029060340160408051601f198184030181529082905261252b91615898565b602060405180830381855afa158015612548573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256b919061550f565b87846140c8565b505050505050505050565b6002602052600090815260409020805460018201805491929161259f906155d1565b80601f01602080910402602001604051908101604052809291908181526020018280546125cb906155d1565b80156126185780601f106125ed57610100808354040283529160200191612618565b820191906000526020600020905b8154815290600101906020018083116125fb57829003601f168201915b5050505050905082565b60055460009061263d908390610100900462ffffff16613488565b9392505050565b600a546001600160a01b0316331461269e5760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e0060448201526064016109a0565b6126a66136d8565b60005b815181101561283b57600060088383815181106126c8576126c861561b565b60200260200101516126da9190615989565b9050600060088484815181106126f2576126f261561b565b602002602001015161270491906158ca565b61270f906007615a6a565b61271a9060206157c9565b6003805491925063ffffffff831b19918291908590811061273d5761273d61561b565b9060005260206000200154166003848154811061275c5761275c61561b565b9060005260206000200181905550600060f81b60048686815181106127835761278361561b565b60200260200101518154612796906155d1565b81106127a4576127a461561b565b8154600116156127c35790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b840402179055508484815181106127f1576127f161561b565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061283390615647565b9150506126a9565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146128b85760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016109a0565b6129106128ec83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250614201565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61283b82826142dc565b600054600160b01b900460ff168061293c5750600054600160a81b900460ff16155b15612989576129496131a8565b61283b8282808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506013939250506145089050565b61283b6000366132b4565b60006129a14360016157b6565b82111580156129be57506005546129bb9060ff16836157b6565b43105b612a215760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084016109a0565b600554600e90612a359060ff166001615ae4565b612a429060ff16846158ca565b81548110612a5257612a5261561b565b90600052602060002001549050919050565b60008054600160a01b900460ff168015612ae75750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015612ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae79190615b2b565b92915050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b5b5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b60448201526064016109a0565b50600090565b606060648211158015612b745750438211155b612bb75760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b60448201526064016109a0565b816001600160401b03811115612bcf57612bcf6150d1565b604051908082528060200260200182016040528015612bf8578160200160208202803683370190505b50905060005b82811015612c5257600d6000612c148343615a6a565b815260200190815260200160002054828281518110612c3557612c3561561b565b602090810291909101015280612c4a81615647565b915050612bfe565b50919050565b600054600160a01b900460ff1615612ca95760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016109a0565b6001600160a01b038216612cff5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016109a0565b6001600160a01b038116612d485760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016109a0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b612dc6613a7c565b600054600160a81b900460ff1615612e205760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016109a0565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff1680612ea65750600054600160a81b900460ff16155b156108ca57612eb36131a8565b6001600160a01b038116612ef85760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016109a0565b601580546001600160a01b0319166001600160a01b03831617905550565b600043612f246064846157b6565b118015612f315750438211155b612f975760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b60648201526084016109a0565b506000908152600d602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061550f565b90506078600c61303481836157b6565b61304090610100615a6a565b61304b9060026157c9565b6130559190615a6a565b61305f9190615a6a565b8161306c600c60786157b6565b61307890610100615a6a565b6130839060026157c9565b600080516020615f52833981519152901c61309e91906157c9565b901b91506130ae600c60786157b6565b6130ba90610100615a6a565b6130c6600c60786157b6565b6130d09190615a6a565b8160016130df600c60786157b6565b6130eb90610100615a6a565b6130f6906002615c31565b6131009190615a6a565b61310c600c60786157b6565b61311890610100615a6a565b600080516020615f52833981519152901c1661313491906157c9565b61313f911c836157b6565b915061314d600c60786157b6565b81600161315c600c60786157b6565b61316890610100615a6a565b613173906002615c31565b61317d9190615a6a565b600080516020615f528339815191521661319791906157c9565b6131a2911c836157b6565b91505090565b600054600160b01b900460ff16156131d8573330146131c9576131c9615605565b6000805460ff60b01b19169055565b6131e0613a7c565b565b60648160ff16106132355760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f206269670000000000000060448201526064016109a0565b6005805460ff191660ff92909216919091179055565b60055461325c9060ff166001615ae4565b60ff166001600160401b03811115613276576132766150d1565b60405190808252806020026020018201604052801561329f578160200160208202803683370190505b5080516108c791600e91602090910190614dce565b6132bc613a7c565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015613308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332c919061550f565b9050600061333a82426157b6565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906133b89082615c8b565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516133f19493929190615d4a565b60405180910390a15050505050565b60006011546012540361342957506005546801000000000000000090046001600160401b031690565b436000908152600d60205260409020541561344357504290565b50600554600160801b90046001600160401b031690565b60008060008061346c8888888861451b565b92509250925061347c82826145ea565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa1580156134f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351b9190615d73565b929650909450925090508315158061353257508215155b61357e5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f7420726567697374657265640000000000000060448201526064016109a0565b604080518082019091528481526020810184905295506135a961ffff808416906110009084166146a3565b9450505050509250929050565b60008083606001518360000151106136365760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f76696465722773207765696768740060648201526084016109a0565b600061364285856146e3565b60208501515190915081801561365c575085604001518111155b93509150505b9250929050565b81816010601154815481106136805761368061561b565b906000526020600020019182613697929190615db9565b506101f460115460016136aa91906157b6565b6136b491906158ca565b6011555050565b3d604051818101604052816000823e82156136d4578181f35b8181fd5b6136e0613400565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600f549050604051602081016040820160608301601154608085015260008060008060008060038752602087208752601089526012545b60808b015181146139195760208a208101808a5254915060001960018316016138505760208920895260028204915060005b6001602060018503040181101561384a57808a510154935060005b61010081101561384157836008820460208402011015613841576010810460108302018a51015497506000955060005b600881101561382b5760208181028a901b60e01c98508302600883040185111561380c5785821b60fe1c99506000198a016137f957968e02607f1c965b60038a0361380c57607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016137bc565b508560108083030460108402018b51015561378c565b50600101613771565b50600191505b6001821661390a579091506002603f8316049060005b610100811015613908578260088204101561390857601081048951015496506000945060005b60088110156138f7576020810288901b60e01c9650600882048411156138d85784821b60fe1c985060001989016138c557958d02607f1c955b600389036138d857607f9690961b8d9004955b6020810260e0039690961b95948617946002919091019060010161388c565b50846010808303048a510155613866565b505b6101f46001820106905061373f565b5050505050505050505060808101516012555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426139909190615a6a565b6108769190615989565b600080846000036139af575083905082613a74565b8484601d82901c158015906139c85750607f198160000b135b156139e8576139d8600a83615989565b91506139e5600182615e78565b90505b6000607f6139f687856157c9565b901c90506000613a068483615a6a565b90505b600381901c158015613a1e5750607f8360000b125b8015613a2c5750601c84901c155b15613a6c57613a3c84600a6157c9565b9350613a49836001615e99565b9250607f613a5788866157c9565b901c9150613a658483615a6a565b9050613a09565b509193509150505b935093915050565b613a8461167a565b6001600160a01b0316336001600160a01b0316146131e05760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016109a0565b60608060048054613ae6906155d1565b90506001600160401b03811115613aff57613aff6150d1565b604051908082528060200260200182016040528015613b28578160200160208202803683370190505b50915060048054613b38906155d1565b90506001600160401b03811115613b5157613b516150d1565b604051908082528060200260200182016040528015613b7a578160200160208202803683370190505b509050600080600860048054613b8f906155d1565b613b9a929150615989565b905060005b81811015613cb357600060038281548110613bbc57613bbc61561b565b600091825260208220015491505b6008811015613c9e57600081613be18560086157c9565b613beb91906157b6565b90506004818154613bfb906155d1565b8110613c0957613c0961561b565b815460011615613c285790600052602060002090602091828204019190065b9054901a600160f81b0260f81c878281518110613c4757613c4761561b565b60009290920b602092830291909101820152613c649083906157c9565b955060e08684901b901c888281518110613c8057613c8061561b565b60209081029190910101525080613c9681615647565b915050613bca565b50508080613cab90615647565b915050613b9f565b50600860048054613cc3906155d1565b613cce9291506158ca565b15613dd857600060038281548110613ce857613ce861561b565b60009182526020822001549150613d008360086157c9565b90505b60048054613d10906155d1565b9050811015613dd5576004818154613d27906155d1565b8110613d3557613d3561561b565b815460011615613d545790600052602060002090602091828204019190065b9054901a600160f81b0260f81c858281518110613d7357613d7361561b565b60009290920b60209283029190910190910152613d916008826158ca565b613d9c9060206157c9565b935060e08483901b901c868281518110613db857613db861561b565b602090810291909101015280613dcd81615647565b915050613d03565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4c919061550f565b905060008080805b600354811015613ff05760038181548110613e7157613e7161561b565b9060005260206000200154925060005b6008811015613fbd5780613e968360086157c9565b613ea091906157b6565b945060048054613eaf906155d1565b9050851015613fbd5760006004868154613ec8906155d1565b8110613ed657613ed661561b565b815460011615613ef55790600052602060002090602091828204019190065b9054600160f81b911a0260f81c90506000613f11836007615a6a565b613f1c9060206157c9565b63ffffffff811b878116821c9650909150613f3886848b61399a565b6004805484199a909a1683861b179992985090945060f885901b918a90613f5e906155d1565b8110613f6c57613f6c61561b565b815460011615613f8b5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b840402179055505050508080613fb590615647565b915050613e81565b508260038281548110613fd257613fd261561b565b60009182526020909120015580613fe881615647565b915050613e54565b5050505050565b600554600160c01b90046001600160401b031660648110156140165750565b805b4381101561283b57600c600061402f606484615a6a565b815260200190815260200160002060006140499190614d76565b600d6000614058606484615a6a565b815260200190815260200160002060009055808061407590615647565b915050614018565b6000600080516020615f5283398151915261409d836000015160036148c5565b6140a89060036157b6565b6140b291906158ca565b6140c1836020015160026148c5565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c61414591906158ca565b9050600061417e614178604080518082018252600080825260209182015281518083019092526001825260029082015290565b8561491d565b9050600061418c878461491d565b9050600061419a8383614964565b805186519192501480156141b5575080602001518560200151145b61204c5760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f7200000060448201526064016109a0565b6000808260405160200161421591906154c3565b6040516020818303038152906040528051906020012090506000805b865181101561428d5786818151811061424c5761424c61561b565b6020026020010151830361427b5785818151811061426c5761426c61561b565b6020026020010151915061428d565b8061428581615647565b915050614231565b506001600160a01b0381166142d35760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016109a0565b95945050505050565b614312828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250614201565b600660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061437882826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250614201565b600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506143ce82826040518060400160405280600d81526020016c566f746572526567697374727960981b815250614201565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614428828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250614201565b600960006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061448e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250614201565b600a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506144e482826040518060400160405280600d81526020016c2332b2a1b0b631bab630ba37b960991b815250614201565b600b80546001600160a01b0319166001600160a01b03929092169190911790555050565b614511826149af565b61283b8282614a3a565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561455657506000915060039050826145e0565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156145aa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166145d6575060009250600191508290506145e0565b9250600091508190505b9450945094915050565b60008260038111156145fe576145fe615eba565b03614607575050565b600182600381111561461b5761461b615eba565b036146395760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561464d5761464d615eba565b0361466e5760405163fce698f760e01b8152600481018290526024016109a0565b600382600381111561468257614682615eba565b0361283b576040516335e2f38360e21b8152600481018290526024016109a0565b6000806146b1858585614a7b565b9050600083806146c3576146c36158b4565b858709905080156146d757816001016146d9565b815b9695505050505050565b60006146f2836080015161407d565b6146fb57600080fd5b614708826020015161407d565b61471157600080fd5b60006147666147288560800151856040015161491d565b614761614757604080518082018252600080825260209182015281518083019092526001825260029082015290565b866060015161491d565b614964565b845160208087015186516040519495506000946147959493019283526020830191909152604082015260600190565b604051602081830303815290604052905060006147b182614ba1565b905060006147d86147ca8760200151886040015161491d565b61476184896060015161491d565b90506000600261480a604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a60200151898760405160200161482c96959493929190615ed0565b60408051601f198184030181529082905261484691615898565b602060405180830381855afa158015614863573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614886919061550f565b90506148b27f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826158ca565b6040880151149550505050505092915050565b6000604051602081016020815260208082015260206040820152846060820152836080820152600080516020615f5283398151915260a082015260208260c0836005600019fa61491457600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61495d57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61495d57600080fd5b8054156108c757805460018083019160009184916149cd9190615a6a565b815481106149dd576149dd61561b565b60009182526020808320909101546001600160a01b031683528201929092526040018120558054819080614a1357614a13615f3b565b600082815260209020810160001990810180546001600160a01b03191690550190556149af565b60005b815181101561213257614a6983838381518110614a5c57614a5c61561b565b6020026020010151614c64565b80614a7381615647565b915050614a3d565b6000808211614abf5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b60448201526064016109a0565b83600003614acf5750600061263d565b83830283858281614ae257614ae26158b4565b0403614b0057828181614af757614af76158b4565b0491505061263d565b506000614b0d8386615989565b90506000614b1b84876158ca565b90506000614b298587615989565b90506000614b3786886158ca565b905085614b4482856157c9565b614b4e9190615989565b614b5883856157c9565b614b6283876157c9565b88614b6d86896157c9565b614b7791906157c9565b614b8191906157b6565b614b8b91906157b6565b614b9591906157b6565b98975050505050505050565b60408051808201909152600080825260208201526000600283604051614bc79190615898565b602060405180830381855afa158015614be4573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614c07919061550f565b90506000614c23600080516020615f52833981519152836158ca565b905060005b614c3182614ccc565b90508015614c52576040805180820190915291825260208201529392505050565b614c5d6001836157b6565b9150614c28565b6001600160a01b038116600090815260018301602052604090205415614c88575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600080600080516020615f52833981519152614ce98460036148c5565b614cf49060036157b6565b614cfe91906158ca565b90506000614d30826002614d216001600080516020615f52833981519152615a6a565b614d2b9190615989565b6148c5565b9050806001141580614d40575081155b15614d4f575060009392505050565b614d6e826004614d21600080516020615f5283398151915260016157b6565b949350505050565b50805460008255906000526020600020908101906108c79190614e19565b508054614da0906155d1565b6000825580601f10614db0575050565b601f0160209004906000526020600020908101906108c79190614e19565b828054828255906000526020600020908101928215614e09579160200282015b82811115614e09578251825591602001919060010190614dee565b50614e15929150614e19565b5090565b5b80821115614e155760008155600101614e1a565b600060208284031215614e4057600080fd5b813560ff8116811461263d57600080fd5b60008083601f840112614e6357600080fd5b5081356001600160401b03811115614e7a57600080fd5b6020830191508360208260051b850101111561366257600080fd5b60008060208385031215614ea857600080fd5b82356001600160401b03811115614ebe57600080fd5b614eca85828601614e51565b90969095509350505050565b600081518084526020808501945080840160005b83811015614f0657815187529582019590820190600101614eea565b509495945050505050565b60008151808452602080850194508084016000805b84811015614f44578251820b88529683019691830191600101614f26565b50959695505050505050565b606081526000614f636060830186614ed6565b8281036020840152614f758186614f11565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b82811015614fd25781516001600160581b03191684529284019290840190600101614fac565b50505083810382850152614fe68188614ed6565b9150508281036040840152614ffb8186614f11565b9150506001600160401b038316606083015295945050505050565b60006020828403121561502857600080fd5b81356001600160401b0381111561503e57600080fd5b8201610140818503121561263d57600080fd5b60006020828403121561506357600080fd5b81356001600160e01b03198116811461263d57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561347c5783516001600160a01b031683529284019291840191600101615097565b6001600160a01b03811681146108c757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715615109576151096150d1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615137576151376150d1565b604052919050565b6000806000806080858703121561515557600080fd5b8435615160816150bc565b935060208581013593506040860135925060608601356001600160401b038082111561518b57600080fd5b818801915088601f83011261519f57600080fd5b8135818111156151b1576151b16150d1565b6151c3601f8201601f1916850161510f565b915080825289848285010111156151d957600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b838110156152145781810151838201526020016151fc565b50506000910152565b600081518084526152358160208601602086016151f9565b601f01601f19169290920160200192915050565b828152604060208201526000614d6e604083018461521d565b60006020828403121561527457600080fd5b813561263d816150bc565b60006001600160401b03821115615298576152986150d1565b5060051b60200190565b600060208083850312156152b557600080fd5b82356001600160401b038111156152cb57600080fd5b8301601f810185136152dc57600080fd5b80356152ef6152ea8261527f565b61510f565b81815260059190911b8201830190838101908783111561530e57600080fd5b928401925b8284101561532c57833582529284019290840190615313565b979650505050505050565b600082601f83011261534857600080fd5b813560206153586152ea8361527f565b82815260059290921b8401810191818101908684111561537757600080fd5b8286015b8481101561539b57803561538e816150bc565b835291830191830161537b565b509695505050505050565b600080604083850312156153b957600080fd5b82356001600160401b03808211156153d057600080fd5b818501915085601f8301126153e457600080fd5b813560206153f46152ea8361527f565b82815260059290921b8401810191818101908984111561541357600080fd5b948201945b8386101561543157853582529482019490820190615418565b9650508601359250508082111561544757600080fd5b5061545485828601615337565b9150509250929050565b60006020828403121561547057600080fd5b5035919050565b60208152600061263d6020830184614ed6565b6000806040838503121561549d57600080fd5b82356154a8816150bc565b915060208301356154b8816150bc565b809150509250929050565b60208152600061263d602083018461521d565b6020808252810182905260006001600160fb1b038311156154f657600080fd5b8260051b80856040850137919091016040019392505050565b60006020828403121561552157600080fd5b5051919050565b80516001600160581b03198116811461554057600080fd5b919050565b6000602080838503121561555857600080fd5b82516001600160401b0381111561556e57600080fd5b8301601f8101851361557f57600080fd5b805161558d6152ea8261527f565b81815260059190911b820183019083810190878311156155ac57600080fd5b928401925b8284101561532c576155c284615528565b825292840192908401906155b1565b600181811c908216806155e557607f821691505b602082108103612c5257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161565957615659615631565b5060010190565b8051600081900b811461554057600080fd5b600082601f83011261568357600080fd5b815160206156936152ea8361527f565b82815260059290921b840181019181810190868411156156b257600080fd5b8286015b8481101561539b576156c781615660565b83529183019183016156b6565b80516001600160401b038116811461554057600080fd5b60008060006060848603121561570057600080fd5b83516001600160401b038082111561571757600080fd5b818601915086601f83011261572b57600080fd5b8151602061573b6152ea8361527f565b82815260059290921b8401810191818101908a84111561575a57600080fd5b948201945b838610156157785785518252948201949082019061575f565b9189015191975090935050508082111561579157600080fd5b5061579e86828701615672565b9250506157ad604085016156d4565b90509250925092565b80820180821115612ae757612ae7615631565b8082028115828204841417612ae757612ae7615631565b6000808335601e198436030181126157f757600080fd5b8301803591506001600160401b0382111561581157600080fd5b60200191503681900382131561366257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006146d960e083018486615826565b600082516158aa8184602087016151f9565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b6000826158d9576158d96158b4565b500690565b600081830360a08112156158f157600080fd5b604051608081018181106001600160401b0382111715615913576159136150d1565b604090815284358252601f198301121561592c57600080fd5b6159346150e7565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561597e57600080fd5b815161263d816150bc565b600082615998576159986158b4565b500490565b6000602082840312156159af57600080fd5b61263d82615528565b805161ffff8116811461554057600080fd5b600060a082840312156159dc57600080fd5b60405160a081018181106001600160401b03821117156159fe576159fe6150d1565b604052825163ffffffff81168114615a1557600080fd5b8152615a2360208401615528565b602082015260408301518060030b8114615a3c57600080fd5b6040820152615a4d606084016159b8565b6060820152615a5e60808401615660565b60808201529392505050565b81810381811115612ae757612ae7615631565b63ffffffff82811682821603908082111561495d5761495d615631565b604081526000615aad6040830185614ed6565b82810360208401526142d38185614f11565b600060208284031215615ad157600080fd5b815162ffffff8116811461263d57600080fd5b60ff8181168382160190811115612ae757612ae7615631565b600080600060608486031215615b1257600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615b3d57600080fd5b8151801515811461263d57600080fd5b600181815b80851115615b88578160001904821115615b6e57615b6e615631565b80851615615b7b57918102915b93841c9390800290615b52565b509250929050565b600082615b9f57506001612ae7565b81615bac57506000612ae7565b8160018114615bc25760028114615bcc57615be8565b6001915050612ae7565b60ff841115615bdd57615bdd615631565b50506001821b612ae7565b5060208310610133831016604e8410600b8410161715615c0b575081810a612ae7565b615c158383615b4d565b8060001904821115615c2957615c29615631565b029392505050565b600061263d8383615b90565b601f82111561213257600081815260208120601f850160051c81016020861015615c645750805b601f850160051c820191505b81811015615c8357828155600101615c70565b505050505050565b81516001600160401b03811115615ca457615ca46150d1565b615cb881615cb284546155d1565b84615c3d565b602080601f831160018114615ced5760008415615cd55750858301515b600019600386901b1c1916600185901b178555615c83565b600085815260208120601f198616915b82811015615d1c57888601518255948401946001909101908401615cfd565b5085821015615d3a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006146d9606083018486615826565b60008060008060808587031215615d8957600080fd5b8451935060208501519250615da0604086016159b8565b9150615dae606086016159b8565b905092959194509250565b6001600160401b03831115615dd057615dd06150d1565b615de483615dde83546155d1565b83615c3d565b6000601f841160018114615e185760008515615e005750838201355b600019600387901b1c1916600186901b178355613ff0565b600083815260209020601f19861690835b82811015615e495786850135825560209485019460019092019101615e29565b5086821015615e665760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f82131715612ae757612ae7615631565b600081810b9083900b01607f8113607f1982121715612ae757612ae7615631565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e08301528351610100830152838101516101208301528251610140830152820151610160820152610180810161532c565b634e487b7160e01b600052603160045260246000fdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220b69c9f963dfddc66e7437bbc74f281de6051533ded5d23ad5a53f18f9b27df1164736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061025c5760003560e01c8063a14634a711610144578063e17f212e116100b6578063ef88bf131161007a578063ef88bf131461079d578063f5a98383146107bd578063f5f5ba72146107d2578063faae7fc91461080c578063fbe532341461082c578063fc79c3001461084c57600080fd5b8063e17f212e146106da578063e22fdece146106fb578063e36da7b714610710578063e621dbc71461073d578063e8d0e70a1461076957600080fd5b8063be60040e11610108578063be60040e14610625578063c10f489a14610645578063c1bff13914610665578063dcb1476e1461067a578063de53fcd51461069a578063debfda30146106ba57600080fd5b8063a14634a714610585578063abfaf170146105a5578063b00c0b76146105c5578063b00eb9fe146105e5578063b3d2fc941461060557600080fd5b806362354e03116101dd57806370473f2f116101a157806370473f2f1461049957806374e6310e146104b95780637925eaca146104e75780637fe3341a146105075780638e0e9f7c1461051c578063a10775321461055157600080fd5b806362354e03146103f2578063623d12971461041257806363f921db1461043457806367fc4029146104545780636d0e8c341461047457600080fd5b8063470e91df11610224578063470e91df1461031d5780635267a15d1461033d5780635a832088146103715780635aa6e675146103bd5780635ff27079146103d257600080fd5b80630799fe75146102615780630a1660511461028957806329bfe39d146102ab57806345a15d3c146102e35780634691377f14610305575b600080fd5b34801561026d57600080fd5b5061027661086c565b6040519081526020015b60405180910390f35b34801561029557600080fd5b506102a96102a4366004614e2e565b61087b565b005b3480156102b757600080fd5b506009546102cb906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102f66102f1366004614e95565b6108d5565b60405161028093929190614f50565b61030d610f10565b6040516102809493929190614f8f565b34801561032957600080fd5b506102a9610338366004615016565b6110b0565b34801561034957600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102cb565b34801561037d57600080fd5b506103a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610280565b3480156103c957600080fd5b506102cb61167a565b3480156103de57600080fd5b506102a96103ed366004615051565b611711565b3480156103fe57600080fd5b506000546102cb906001600160a01b031681565b34801561041e57600080fd5b50610427611997565b604051610280919061507b565b34801561044057600080fd5b506102a961044f366004614e95565b6119fc565b34801561046057600080fd5b506102a961046f366004615051565b612056565b34801561048057600080fd5b50610489612137565b6040519015158152602001610280565b3480156104a557600080fd5b506102a96104b436600461513f565b61247c565b3480156104c557600080fd5b506104d96104d4366004615051565b61257d565b604051610280929190615249565b3480156104f357600080fd5b506007546102cb906001600160a01b031681565b34801561051357600080fd5b50610276601481565b34801561052857600080fd5b5060055461053d90610100900462ffffff1681565b60405162ffffff9091168152602001610280565b34801561055d57600080fd5b506102cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059157600080fd5b506102766105a0366004615262565b612622565b3480156105b157600080fd5b506102a96105c03660046152a2565b612644565b3480156105d157600080fd5b506102a96105e03660046153a6565b61283f565b3480156105f157600080fd5b50600b546102cb906001600160a01b031681565b34801561061157600080fd5b506102a9610620366004614e95565b61291a565b34801561063157600080fd5b506008546102cb906001600160a01b031681565b34801561065157600080fd5b50600a546102cb906001600160a01b031681565b34801561067157600080fd5b50610276606481565b34801561068657600080fd5b5061027661069536600461545e565b612994565b3480156106a657600080fd5b506015546102cb906001600160a01b031681565b3480156106c657600080fd5b506104896106d5366004615262565b612a64565b3480156106e657600080fd5b5060005461048990600160a81b900460ff1681565b34801561070757600080fd5b50610489612aed565b34801561071c57600080fd5b5061073061072b36600461545e565b612b61565b6040516102809190615477565b34801561074957600080fd5b506005546107579060ff1681565b60405160ff9091168152602001610280565b34801561077557600080fd5b506103a57f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a957600080fd5b506102a96107b836600461548a565b612c58565b3480156107c957600080fd5b506102a9612dbe565b3480156107de57600080fd5b50604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b6020820152905161028091906154c3565b34801561081857600080fd5b506006546102cb906001600160a01b031681565b34801561083857600080fd5b506102a9610847366004615262565b612e84565b34801561085857600080fd5b5061027661086736600461545e565b612f16565b6000610876612faa565b905090565b600054600160b01b900460ff168061089d5750600054600160a81b900460ff16155b156108ca576108aa6131a8565b6108b3816131e2565b6108bf600e6000614d76565b6108c761324b565b50565b6108c76000366132b4565b3360009081526014602052604081205460609182918103610a5057600b54604051630e2f54db60e41b81526000916001600160a01b03169063e2f54db09061092390899089906004016154d6565b602060405180830381865afa158015610940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610964919061550f565b9050803410156109a95760405162461bcd60e51b815260206004820152600b60248201526a746f6f206c6f772066656560a81b60448201526064015b60405180910390fd5b3415610a4a576015546040516000916001600160a01b03169083908381818185875af1925050503d80600081146109fc576040519150601f19603f3d011682016040523d82523d6000602084013e610a01565b606091505b5050905080610a485760405162461bcd60e51b8152602060048201526013602482015272199959481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016109a0565b505b50610a90565b3415610a905760405162461bcd60e51b815260206004820152600f60248201526e1b9bc819995948195e1c1958dd1959608a1b60448201526064016109a0565b836001600160401b03811115610aa857610aa86150d1565b604051908082528060200260200182016040528015610ad1578160200160208202803683370190505b50604051600480825254919350906000806000196001841601610b9e5760208420606085015260028304925060208985376020845104602085015282845110610b1957600080fd5b602084015160608501510154915060005b88811015610b985760208082028b0186376020855104915083855110610b4f57600080fd5b6020855106604086015260208501518214610b7557816020860152816060860151015492505b604085015160080283901b60f81c60208281028901018190529150600101610b2a565b50600192505b60018316610bf3576002603f84160492915060005b88811015610bf15760208082028b01863783855110610bd157600080fd5b845160080283901b60f81c60208281028901018190529150600101610bb3565b505b50505050610bff613400565b9050836001600160401b03811115610c1957610c196150d1565b604051908082528060200260200182016040528015610c42578160200160208202803683370190505b50600f546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672606083015260115460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a811015610d445760208082028d01873784865110610cf257600080fd5b600886510491506008865106604087015260208601518214610d1f578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c010152600181019050610cd4565b506012545b60c08601518114610f025760608601518101608087018190525494506000196001861601610e535760206080870181812090526002909504948c8737608086510460208701526004850286511015610daa5760208601516080870151015493505b60005b8b811015610e4d5760208082028e018837608087510492506004860287511015610e45576080875106604088015260208701518314610df757826020880152826080880151015494505b604087015160020285901b60fe1c92506000198301610e275760208181028c010180518902607f81901c90915293505b60038303610e455760208181028c01018051607f1b89810490915293505b600101610dad565b50600194505b60018516610ef3576002603f86160494935060208c87376080865104602087015260005b8b811015610ef15760208082028e0188376004860287511015610ee9578651607f166040880181905260020285901b60fe1c92506000198301610ecb5760208181028c010180518902607f81901c90915293505b60038303610ee95760208181028c01018051607f1b89810490915293505b600101610e77565b505b6101f460018201069050610d49565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f929190810190615545565b935060048054610fa1906155d1565b9050845114610fb257610fb2615605565b600084516001600160401b03811115610fcd57610fcd6150d1565b604051908082528060200260200182016040528015610ff6578160200160208202803683370190505b50905060005b815181101561103557808282815181106110185761101861561b565b60209081029190910101528061102d81615647565b915050610ffc565b50604051631168574f60e21b815230906345a15d3c90349061105b908590600401615477565b60006040518083038185885af1158015611079573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526110a291908101906156eb565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff166110dc8385356157b6565b43106111415760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084016109a0565b83354310156111a85760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b60648201526084016109a0565b6003546111b69060086157c9565b6111c360c08601866157e0565b6111cf915060046157c9565b11156112275760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b60648201526084016109a0565b6000600285356020870161123e60c08901896157e0565b604051602001611251949392919061584f565b60408051601f198184030181529082905261126b91615898565b602060405180830381855afa158015611288573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112ab919061550f565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190611303836112f46101008b0185614e2e565b8460200135856040013561345a565b90506001600160a01b03811661135b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109a0565b6000806113688389613488565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e8919061550f565b81528c356020820152604001600e6114018d60016157b6565b61140c908f356158ca565b8154811061141c5761141c61561b565b6000918252602080832090910154835282810186905260409283018790528e35808352600c8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261148e91615898565b602060405180830381855afa1580156114ab573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114ce919061550f565b905060005b825481101561155957818382815481106114ef576114ef61561b565b9060005260206000200154036115475760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f7669646564000000000060448201526064016109a0565b8061155181615647565b9150506114d3565b508181908060018154018082558091505060019003906000526020600020016000909190919091505560006115a1848f60200180360381019061159c91906158de565b6135b6565b509050806115f15760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c696400000000000000000060448201526064016109a0565b6116098e8060c0019061160491906157e0565b613669565b436000908152600d602052604081208054600192906116299084906157b6565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661169c57506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610876919061596c565b61171a33612a64565b6117565760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016109a0565b6001600160e01b03198116600090815260026020526040812080549091036117c05760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016109a0565b80544210156118115760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016109a0565b6000816001018054611822906155d1565b80601f016020809104026020016040519081016040528092919081815260200182805461184e906155d1565b801561189b5780601f106118705761010080835404028352916020019161189b565b820191906000526020600020905b81548152906001019060200180831161187e57829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506118cd6001830182614d94565b50506000805460ff60b01b1916600160b01b17815560405130906118f2908490615898565b6000604051808303816000865af19150503d806000811461192f576040519150601f19603f3d011682016040523d82523d6000602084013e611934565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1611991816136bb565b50505050565b606060136000018054806020026020016040519081016040528092919081815260200182805480156119f257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116119d4575b5050505050905090565b600a546001600160a01b0316331480611a2d5750611a1861167a565b6001600160a01b0316336001600160a01b0316145b611a8f5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b60648201526084016109a0565b611a976136d8565b6000805b82811015611af15781848483818110611ab657611ab661561b565b905060200201351115611adf57838382818110611ad557611ad561561b565b9050602002013591505b80611ae981615647565b915050611a9b565b50600060048054611b01906155d1565b9150505b818111611b80576004600181805480611b1d906155d1565b80601f8103611b3c5783600052602060002060ff1984168155603f9350505b50600282018355600181019250505003815460011615611b6b5790600052602060002090602091828204019190065b50819050611b7881615647565b915050611b05565b506003545b611b90600883615989565b8111611bb45760038054600101815560005280611bac81615647565b915050611b85565b5060048054611bc2906155d1565b600354909150611bd39060086157c9565b1015611be157611be1615605565b6000611beb61392f565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6c919061550f565b905060008060005b8681101561204c57600a546000906001600160a01b031663931028368a8a85818110611ca257611ca261561b565b905060200201356040518263ffffffff1660e01b8152600401611cc791815260200190565b602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d08919061599d565b90506001600160581b03198116611d575760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b60448201526064016109a0565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce91906159ca565b9050866014826000015163ffffffff16611de891906157b6565b11611e245760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b60448201526064016109a0565b6000816040015160030b13611e7b5760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e65676174697665000000000060448201526064016109a0565b611e94816040015163ffffffff1682608001518861399a565b9095509350600060088b8b86818110611eaf57611eaf61561b565b90506020020135611ec09190615989565b9050600060088c8c87818110611ed857611ed861561b565b90506020020135611ee991906158ca565b611ef4906007615a6a565b611eff9060206157c9565b6003805491925063ffffffff831b199189841b91839186908110611f2557611f2561561b565b9060005260206000200154161760038481548110611f4557611f4561561b565b90600052602060002001819055508660f81b60048e8e89818110611f6b57611f6b61561b565b905060200201358154611f7d906155d1565b8110611f8b57611f8b61561b565b815460011615611faa5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611fe757611fe761561b565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b60405161202c92919091825260000b602082015260400190565b60405180910390a45050505050808061204490615647565b915050611c74565b5050505050505050565b61205e613a7c565b6001600160e01b0319811660009081526002602052604081205490036120c65760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016109a0565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906121326001830182614d94565b505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121a55760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b60448201526064016109a0565b6121ad6136d8565b60006121b761392f565b60055490915063ffffffff64010000000090910481169082161115612253576000806121e1613ad6565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050612211600184615a7d565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051612248929190615a9a565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa15801561229d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c19190615abf565b60055490915062ffffff80831661010090920416146122fb576122e2613dde565b6005805463ffffff00191661010062ffffff8416021790555b612303613ff7565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff90921691909117179055506123bc9050612faa565b600554600e906123d09060ff166001615ae4565b60ff166123de4360016157b6565b6123e891906158ca565b815481106123f8576123f861561b565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa15801561244c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612470919061550f565b600f5550600191505090565b6000806000838060200190518101906124959190615afd565b604080518082019091528981526020810189905292955090935091506124ba8161407d565b6124c357600080fd5b60408051808201909152838152602081018390526124e08161407d565b6124e957600080fd5b6040516bffffffffffffffffffffffff1960608b901b16602082015261257290839060029060340160408051601f198184030181529082905261252b91615898565b602060405180830381855afa158015612548573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256b919061550f565b87846140c8565b505050505050505050565b6002602052600090815260409020805460018201805491929161259f906155d1565b80601f01602080910402602001604051908101604052809291908181526020018280546125cb906155d1565b80156126185780601f106125ed57610100808354040283529160200191612618565b820191906000526020600020905b8154815290600101906020018083116125fb57829003601f168201915b5050505050905082565b60055460009061263d908390610100900462ffffff16613488565b9392505050565b600a546001600160a01b0316331461269e5760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e0060448201526064016109a0565b6126a66136d8565b60005b815181101561283b57600060088383815181106126c8576126c861561b565b60200260200101516126da9190615989565b9050600060088484815181106126f2576126f261561b565b602002602001015161270491906158ca565b61270f906007615a6a565b61271a9060206157c9565b6003805491925063ffffffff831b19918291908590811061273d5761273d61561b565b9060005260206000200154166003848154811061275c5761275c61561b565b9060005260206000200181905550600060f81b60048686815181106127835761278361561b565b60200260200101518154612796906155d1565b81106127a4576127a461561b565b8154600116156127c35790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b840402179055508484815181106127f1576127f161561b565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061283390615647565b9150506126a9565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146128b85760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016109a0565b6129106128ec83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250614201565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61283b82826142dc565b600054600160b01b900460ff168061293c5750600054600160a81b900460ff16155b15612989576129496131a8565b61283b8282808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506013939250506145089050565b61283b6000366132b4565b60006129a14360016157b6565b82111580156129be57506005546129bb9060ff16836157b6565b43105b612a215760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084016109a0565b600554600e90612a359060ff166001615ae4565b612a429060ff16846158ca565b81548110612a5257612a5261561b565b90600052602060002001549050919050565b60008054600160a01b900460ff168015612ae75750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015612ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae79190615b2b565b92915050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b5b5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b60448201526064016109a0565b50600090565b606060648211158015612b745750438211155b612bb75760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b60448201526064016109a0565b816001600160401b03811115612bcf57612bcf6150d1565b604051908082528060200260200182016040528015612bf8578160200160208202803683370190505b50905060005b82811015612c5257600d6000612c148343615a6a565b815260200190815260200160002054828281518110612c3557612c3561561b565b602090810291909101015280612c4a81615647565b915050612bfe565b50919050565b600054600160a01b900460ff1615612ca95760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016109a0565b6001600160a01b038216612cff5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016109a0565b6001600160a01b038116612d485760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016109a0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b612dc6613a7c565b600054600160a81b900460ff1615612e205760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016109a0565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff1680612ea65750600054600160a81b900460ff16155b156108ca57612eb36131a8565b6001600160a01b038116612ef85760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016109a0565b601580546001600160a01b0319166001600160a01b03831617905550565b600043612f246064846157b6565b118015612f315750438211155b612f975760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b60648201526084016109a0565b506000908152600d602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061550f565b90506078600c61303481836157b6565b61304090610100615a6a565b61304b9060026157c9565b6130559190615a6a565b61305f9190615a6a565b8161306c600c60786157b6565b61307890610100615a6a565b6130839060026157c9565b600080516020615f52833981519152901c61309e91906157c9565b901b91506130ae600c60786157b6565b6130ba90610100615a6a565b6130c6600c60786157b6565b6130d09190615a6a565b8160016130df600c60786157b6565b6130eb90610100615a6a565b6130f6906002615c31565b6131009190615a6a565b61310c600c60786157b6565b61311890610100615a6a565b600080516020615f52833981519152901c1661313491906157c9565b61313f911c836157b6565b915061314d600c60786157b6565b81600161315c600c60786157b6565b61316890610100615a6a565b613173906002615c31565b61317d9190615a6a565b600080516020615f528339815191521661319791906157c9565b6131a2911c836157b6565b91505090565b600054600160b01b900460ff16156131d8573330146131c9576131c9615605565b6000805460ff60b01b19169055565b6131e0613a7c565b565b60648160ff16106132355760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f206269670000000000000060448201526064016109a0565b6005805460ff191660ff92909216919091179055565b60055461325c9060ff166001615ae4565b60ff166001600160401b03811115613276576132766150d1565b60405190808252806020026020018201604052801561329f578160200160208202803683370190505b5080516108c791600e91602090910190614dce565b6132bc613a7c565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015613308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332c919061550f565b9050600061333a82426157b6565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906133b89082615c8b565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516133f19493929190615d4a565b60405180910390a15050505050565b60006011546012540361342957506005546801000000000000000090046001600160401b031690565b436000908152600d60205260409020541561344357504290565b50600554600160801b90046001600160401b031690565b60008060008061346c8888888861451b565b92509250925061347c82826145ea565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa1580156134f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351b9190615d73565b929650909450925090508315158061353257508215155b61357e5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f7420726567697374657265640000000000000060448201526064016109a0565b604080518082019091528481526020810184905295506135a961ffff808416906110009084166146a3565b9450505050509250929050565b60008083606001518360000151106136365760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f76696465722773207765696768740060648201526084016109a0565b600061364285856146e3565b60208501515190915081801561365c575085604001518111155b93509150505b9250929050565b81816010601154815481106136805761368061561b565b906000526020600020019182613697929190615db9565b506101f460115460016136aa91906157b6565b6136b491906158ca565b6011555050565b3d604051818101604052816000823e82156136d4578181f35b8181fd5b6136e0613400565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600f549050604051602081016040820160608301601154608085015260008060008060008060038752602087208752601089526012545b60808b015181146139195760208a208101808a5254915060001960018316016138505760208920895260028204915060005b6001602060018503040181101561384a57808a510154935060005b61010081101561384157836008820460208402011015613841576010810460108302018a51015497506000955060005b600881101561382b5760208181028a901b60e01c98508302600883040185111561380c5785821b60fe1c99506000198a016137f957968e02607f1c965b60038a0361380c57607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016137bc565b508560108083030460108402018b51015561378c565b50600101613771565b50600191505b6001821661390a579091506002603f8316049060005b610100811015613908578260088204101561390857601081048951015496506000945060005b60088110156138f7576020810288901b60e01c9650600882048411156138d85784821b60fe1c985060001989016138c557958d02607f1c955b600389036138d857607f9690961b8d9004955b6020810260e0039690961b95948617946002919091019060010161388c565b50846010808303048a510155613866565b505b6101f46001820106905061373f565b5050505050505050505060808101516012555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426139909190615a6a565b6108769190615989565b600080846000036139af575083905082613a74565b8484601d82901c158015906139c85750607f198160000b135b156139e8576139d8600a83615989565b91506139e5600182615e78565b90505b6000607f6139f687856157c9565b901c90506000613a068483615a6a565b90505b600381901c158015613a1e5750607f8360000b125b8015613a2c5750601c84901c155b15613a6c57613a3c84600a6157c9565b9350613a49836001615e99565b9250607f613a5788866157c9565b901c9150613a658483615a6a565b9050613a09565b509193509150505b935093915050565b613a8461167a565b6001600160a01b0316336001600160a01b0316146131e05760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016109a0565b60608060048054613ae6906155d1565b90506001600160401b03811115613aff57613aff6150d1565b604051908082528060200260200182016040528015613b28578160200160208202803683370190505b50915060048054613b38906155d1565b90506001600160401b03811115613b5157613b516150d1565b604051908082528060200260200182016040528015613b7a578160200160208202803683370190505b509050600080600860048054613b8f906155d1565b613b9a929150615989565b905060005b81811015613cb357600060038281548110613bbc57613bbc61561b565b600091825260208220015491505b6008811015613c9e57600081613be18560086157c9565b613beb91906157b6565b90506004818154613bfb906155d1565b8110613c0957613c0961561b565b815460011615613c285790600052602060002090602091828204019190065b9054901a600160f81b0260f81c878281518110613c4757613c4761561b565b60009290920b602092830291909101820152613c649083906157c9565b955060e08684901b901c888281518110613c8057613c8061561b565b60209081029190910101525080613c9681615647565b915050613bca565b50508080613cab90615647565b915050613b9f565b50600860048054613cc3906155d1565b613cce9291506158ca565b15613dd857600060038281548110613ce857613ce861561b565b60009182526020822001549150613d008360086157c9565b90505b60048054613d10906155d1565b9050811015613dd5576004818154613d27906155d1565b8110613d3557613d3561561b565b815460011615613d545790600052602060002090602091828204019190065b9054901a600160f81b0260f81c858281518110613d7357613d7361561b565b60009290920b60209283029190910190910152613d916008826158ca565b613d9c9060206157c9565b935060e08483901b901c868281518110613db857613db861561b565b602090810291909101015280613dcd81615647565b915050613d03565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4c919061550f565b905060008080805b600354811015613ff05760038181548110613e7157613e7161561b565b9060005260206000200154925060005b6008811015613fbd5780613e968360086157c9565b613ea091906157b6565b945060048054613eaf906155d1565b9050851015613fbd5760006004868154613ec8906155d1565b8110613ed657613ed661561b565b815460011615613ef55790600052602060002090602091828204019190065b9054600160f81b911a0260f81c90506000613f11836007615a6a565b613f1c9060206157c9565b63ffffffff811b878116821c9650909150613f3886848b61399a565b6004805484199a909a1683861b179992985090945060f885901b918a90613f5e906155d1565b8110613f6c57613f6c61561b565b815460011615613f8b5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b840402179055505050508080613fb590615647565b915050613e81565b508260038281548110613fd257613fd261561b565b60009182526020909120015580613fe881615647565b915050613e54565b5050505050565b600554600160c01b90046001600160401b031660648110156140165750565b805b4381101561283b57600c600061402f606484615a6a565b815260200190815260200160002060006140499190614d76565b600d6000614058606484615a6a565b815260200190815260200160002060009055808061407590615647565b915050614018565b6000600080516020615f5283398151915261409d836000015160036148c5565b6140a89060036157b6565b6140b291906158ca565b6140c1836020015160026148c5565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c61414591906158ca565b9050600061417e614178604080518082018252600080825260209182015281518083019092526001825260029082015290565b8561491d565b9050600061418c878461491d565b9050600061419a8383614964565b805186519192501480156141b5575080602001518560200151145b61204c5760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f7200000060448201526064016109a0565b6000808260405160200161421591906154c3565b6040516020818303038152906040528051906020012090506000805b865181101561428d5786818151811061424c5761424c61561b565b6020026020010151830361427b5785818151811061426c5761426c61561b565b6020026020010151915061428d565b8061428581615647565b915050614231565b506001600160a01b0381166142d35760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016109a0565b95945050505050565b614312828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250614201565b600660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061437882826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250614201565b600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506143ce82826040518060400160405280600d81526020016c566f746572526567697374727960981b815250614201565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550614428828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250614201565b600960006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061448e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250614201565b600a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506144e482826040518060400160405280600d81526020016c2332b2a1b0b631bab630ba37b960991b815250614201565b600b80546001600160a01b0319166001600160a01b03929092169190911790555050565b614511826149af565b61283b8282614a3a565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561455657506000915060039050826145e0565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156145aa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166145d6575060009250600191508290506145e0565b9250600091508190505b9450945094915050565b60008260038111156145fe576145fe615eba565b03614607575050565b600182600381111561461b5761461b615eba565b036146395760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561464d5761464d615eba565b0361466e5760405163fce698f760e01b8152600481018290526024016109a0565b600382600381111561468257614682615eba565b0361283b576040516335e2f38360e21b8152600481018290526024016109a0565b6000806146b1858585614a7b565b9050600083806146c3576146c36158b4565b858709905080156146d757816001016146d9565b815b9695505050505050565b60006146f2836080015161407d565b6146fb57600080fd5b614708826020015161407d565b61471157600080fd5b60006147666147288560800151856040015161491d565b614761614757604080518082018252600080825260209182015281518083019092526001825260029082015290565b866060015161491d565b614964565b845160208087015186516040519495506000946147959493019283526020830191909152604082015260600190565b604051602081830303815290604052905060006147b182614ba1565b905060006147d86147ca8760200151886040015161491d565b61476184896060015161491d565b90506000600261480a604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a60200151898760405160200161482c96959493929190615ed0565b60408051601f198184030181529082905261484691615898565b602060405180830381855afa158015614863573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614886919061550f565b90506148b27f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826158ca565b6040880151149550505050505092915050565b6000604051602081016020815260208082015260206040820152846060820152836080820152600080516020615f5283398151915260a082015260208260c0836005600019fa61491457600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61495d57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61495d57600080fd5b8054156108c757805460018083019160009184916149cd9190615a6a565b815481106149dd576149dd61561b565b60009182526020808320909101546001600160a01b031683528201929092526040018120558054819080614a1357614a13615f3b565b600082815260209020810160001990810180546001600160a01b03191690550190556149af565b60005b815181101561213257614a6983838381518110614a5c57614a5c61561b565b6020026020010151614c64565b80614a7381615647565b915050614a3d565b6000808211614abf5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b60448201526064016109a0565b83600003614acf5750600061263d565b83830283858281614ae257614ae26158b4565b0403614b0057828181614af757614af76158b4565b0491505061263d565b506000614b0d8386615989565b90506000614b1b84876158ca565b90506000614b298587615989565b90506000614b3786886158ca565b905085614b4482856157c9565b614b4e9190615989565b614b5883856157c9565b614b6283876157c9565b88614b6d86896157c9565b614b7791906157c9565b614b8191906157b6565b614b8b91906157b6565b614b9591906157b6565b98975050505050505050565b60408051808201909152600080825260208201526000600283604051614bc79190615898565b602060405180830381855afa158015614be4573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614c07919061550f565b90506000614c23600080516020615f52833981519152836158ca565b905060005b614c3182614ccc565b90508015614c52576040805180820190915291825260208201529392505050565b614c5d6001836157b6565b9150614c28565b6001600160a01b038116600090815260018301602052604090205415614c88575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600080600080516020615f52833981519152614ce98460036148c5565b614cf49060036157b6565b614cfe91906158ca565b90506000614d30826002614d216001600080516020615f52833981519152615a6a565b614d2b9190615989565b6148c5565b9050806001141580614d40575081155b15614d4f575060009392505050565b614d6e826004614d21600080516020615f5283398151915260016157b6565b949350505050565b50805460008255906000526020600020908101906108c79190614e19565b508054614da0906155d1565b6000825580601f10614db0575050565b601f0160209004906000526020600020908101906108c79190614e19565b828054828255906000526020600020908101928215614e09579160200282015b82811115614e09578251825591602001919060010190614dee565b50614e15929150614e19565b5090565b5b80821115614e155760008155600101614e1a565b600060208284031215614e4057600080fd5b813560ff8116811461263d57600080fd5b60008083601f840112614e6357600080fd5b5081356001600160401b03811115614e7a57600080fd5b6020830191508360208260051b850101111561366257600080fd5b60008060208385031215614ea857600080fd5b82356001600160401b03811115614ebe57600080fd5b614eca85828601614e51565b90969095509350505050565b600081518084526020808501945080840160005b83811015614f0657815187529582019590820190600101614eea565b509495945050505050565b60008151808452602080850194508084016000805b84811015614f44578251820b88529683019691830191600101614f26565b50959695505050505050565b606081526000614f636060830186614ed6565b8281036020840152614f758186614f11565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b82811015614fd25781516001600160581b03191684529284019290840190600101614fac565b50505083810382850152614fe68188614ed6565b9150508281036040840152614ffb8186614f11565b9150506001600160401b038316606083015295945050505050565b60006020828403121561502857600080fd5b81356001600160401b0381111561503e57600080fd5b8201610140818503121561263d57600080fd5b60006020828403121561506357600080fd5b81356001600160e01b03198116811461263d57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561347c5783516001600160a01b031683529284019291840191600101615097565b6001600160a01b03811681146108c757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715615109576151096150d1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615137576151376150d1565b604052919050565b6000806000806080858703121561515557600080fd5b8435615160816150bc565b935060208581013593506040860135925060608601356001600160401b038082111561518b57600080fd5b818801915088601f83011261519f57600080fd5b8135818111156151b1576151b16150d1565b6151c3601f8201601f1916850161510f565b915080825289848285010111156151d957600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b838110156152145781810151838201526020016151fc565b50506000910152565b600081518084526152358160208601602086016151f9565b601f01601f19169290920160200192915050565b828152604060208201526000614d6e604083018461521d565b60006020828403121561527457600080fd5b813561263d816150bc565b60006001600160401b03821115615298576152986150d1565b5060051b60200190565b600060208083850312156152b557600080fd5b82356001600160401b038111156152cb57600080fd5b8301601f810185136152dc57600080fd5b80356152ef6152ea8261527f565b61510f565b81815260059190911b8201830190838101908783111561530e57600080fd5b928401925b8284101561532c57833582529284019290840190615313565b979650505050505050565b600082601f83011261534857600080fd5b813560206153586152ea8361527f565b82815260059290921b8401810191818101908684111561537757600080fd5b8286015b8481101561539b57803561538e816150bc565b835291830191830161537b565b509695505050505050565b600080604083850312156153b957600080fd5b82356001600160401b03808211156153d057600080fd5b818501915085601f8301126153e457600080fd5b813560206153f46152ea8361527f565b82815260059290921b8401810191818101908984111561541357600080fd5b948201945b8386101561543157853582529482019490820190615418565b9650508601359250508082111561544757600080fd5b5061545485828601615337565b9150509250929050565b60006020828403121561547057600080fd5b5035919050565b60208152600061263d6020830184614ed6565b6000806040838503121561549d57600080fd5b82356154a8816150bc565b915060208301356154b8816150bc565b809150509250929050565b60208152600061263d602083018461521d565b6020808252810182905260006001600160fb1b038311156154f657600080fd5b8260051b80856040850137919091016040019392505050565b60006020828403121561552157600080fd5b5051919050565b80516001600160581b03198116811461554057600080fd5b919050565b6000602080838503121561555857600080fd5b82516001600160401b0381111561556e57600080fd5b8301601f8101851361557f57600080fd5b805161558d6152ea8261527f565b81815260059190911b820183019083810190878311156155ac57600080fd5b928401925b8284101561532c576155c284615528565b825292840192908401906155b1565b600181811c908216806155e557607f821691505b602082108103612c5257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161565957615659615631565b5060010190565b8051600081900b811461554057600080fd5b600082601f83011261568357600080fd5b815160206156936152ea8361527f565b82815260059290921b840181019181810190868411156156b257600080fd5b8286015b8481101561539b576156c781615660565b83529183019183016156b6565b80516001600160401b038116811461554057600080fd5b60008060006060848603121561570057600080fd5b83516001600160401b038082111561571757600080fd5b818601915086601f83011261572b57600080fd5b8151602061573b6152ea8361527f565b82815260059290921b8401810191818101908a84111561575a57600080fd5b948201945b838610156157785785518252948201949082019061575f565b9189015191975090935050508082111561579157600080fd5b5061579e86828701615672565b9250506157ad604085016156d4565b90509250925092565b80820180821115612ae757612ae7615631565b8082028115828204841417612ae757612ae7615631565b6000808335601e198436030181126157f757600080fd5b8301803591506001600160401b0382111561581157600080fd5b60200191503681900382131561366257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006146d960e083018486615826565b600082516158aa8184602087016151f9565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b6000826158d9576158d96158b4565b500690565b600081830360a08112156158f157600080fd5b604051608081018181106001600160401b0382111715615913576159136150d1565b604090815284358252601f198301121561592c57600080fd5b6159346150e7565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561597e57600080fd5b815161263d816150bc565b600082615998576159986158b4565b500490565b6000602082840312156159af57600080fd5b61263d82615528565b805161ffff8116811461554057600080fd5b600060a082840312156159dc57600080fd5b60405160a081018181106001600160401b03821117156159fe576159fe6150d1565b604052825163ffffffff81168114615a1557600080fd5b8152615a2360208401615528565b602082015260408301518060030b8114615a3c57600080fd5b6040820152615a4d606084016159b8565b6060820152615a5e60808401615660565b60808201529392505050565b81810381811115612ae757612ae7615631565b63ffffffff82811682821603908082111561495d5761495d615631565b604081526000615aad6040830185614ed6565b82810360208401526142d38185614f11565b600060208284031215615ad157600080fd5b815162ffffff8116811461263d57600080fd5b60ff8181168382160190811115612ae757612ae7615631565b600080600060608486031215615b1257600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615b3d57600080fd5b8151801515811461263d57600080fd5b600181815b80851115615b88578160001904821115615b6e57615b6e615631565b80851615615b7b57918102915b93841c9390800290615b52565b509250929050565b600082615b9f57506001612ae7565b81615bac57506000612ae7565b8160018114615bc25760028114615bcc57615be8565b6001915050612ae7565b60ff841115615bdd57615bdd615631565b50506001821b612ae7565b5060208310610133831016604e8410600b8410161715615c0b575081810a612ae7565b615c158383615b4d565b8060001904821115615c2957615c29615631565b029392505050565b600061263d8383615b90565b601f82111561213257600081815260208120601f850160051c81016020861015615c645750805b601f850160051c820191505b81811015615c8357828155600101615c70565b505050505050565b81516001600160401b03811115615ca457615ca46150d1565b615cb881615cb284546155d1565b84615c3d565b602080601f831160018114615ced5760008415615cd55750858301515b600019600386901b1c1916600185901b178555615c83565b600085815260208120601f198616915b82811015615d1c57888601518255948401946001909101908401615cfd565b5085821015615d3a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006146d9606083018486615826565b60008060008060808587031215615d8957600080fd5b8451935060208501519250615da0604086016159b8565b9150615dae606086016159b8565b905092959194509250565b6001600160401b03831115615dd057615dd06150d1565b615de483615dde83546155d1565b83615c3d565b6000601f841160018114615e185760008515615e005750838201355b600019600387901b1c1916600186901b178355613ff0565b600083815260209020601f19861690835b82811015615e495786850135825560209485019460019092019101615e29565b5086821015615e665760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f82131715612ae757612ae7615631565b600081810b9083900b01607f8113607f1982121715612ae757612ae7615631565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e08301528351610100830152838101516101208301528251610140830152820151610160820152610180810161532c565b634e487b7160e01b600052603160045260246000fdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220b69c9f963dfddc66e7437bbc74f281de6051533ded5d23ad5a53f18f9b27df1164736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abi/ProtocolMerkleStructs.json b/abi/ProtocolMerkleStructs.json index 0706ab10..6d498818 100644 --- a/abi/ProtocolMerkleStructs.json +++ b/abi/ProtocolMerkleStructs.json @@ -23,12 +23,12 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" } ], - "internalType": "struct IRewardManager.RewardClaim", + "internalType": "struct RewardsV2Interface.RewardClaim", "name": "_claim", "type": "tuple" } @@ -65,17 +65,17 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" } ], - "internalType": "struct IRewardManager.RewardClaim", + "internalType": "struct RewardsV2Interface.RewardClaim", "name": "body", "type": "tuple" } ], - "internalType": "struct IRewardManager.RewardClaimWithProof", + "internalType": "struct RewardsV2Interface.RewardClaimWithProof", "name": "_proof", "type": "tuple" } diff --git a/abi/Relay.json b/abi/Relay.json index 5842ed8a..17d343a1 100644 --- a/abi/Relay.json +++ b/abi/Relay.json @@ -5,60 +5,89 @@ "abi": [ { "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "initialRewardEpochId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "startingVotingRoundIdForInitialRewardEpochId", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "initialSigningPolicyHash", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "randomNumberProtocolId", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "firstVotingRoundStartTs", + "type": "uint32" + }, + { + "internalType": "uint8", + "name": "votingEpochDurationSeconds", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "firstRewardEpochStartVotingRoundId", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "rewardEpochDurationInVotingEpochs", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "thresholdIncreaseBIPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "messageFinalizationWindowInRewardEpochs", + "type": "uint32" + }, + { + "internalType": "address payable", + "name": "feeCollectionAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "protocolId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeInWei", + "type": "uint256" + } + ], + "internalType": "struct IRelay.FeeConfig[]", + "name": "feeConfigs", + "type": "tuple[]" + } + ], + "internalType": "struct IRelay.RelayInitialConfig", + "name": "_initialConfig", + "type": "tuple" + }, { "internalType": "address", "name": "_signingPolicySetter", "type": "address" - }, - { - "internalType": "uint32", - "name": "_initialRewardEpochId", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_startingVotingRoundIdForInitialRewardEpochId", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_initialSigningPolicyHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "_randomNumberProtocolId", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "_firstVotingRoundStartTs", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "_votingEpochDurationSeconds", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "_firstRewardEpochStartVotingRoundId", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_rewardEpochDurationInVotingEpochs", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_thresholdIncreaseBIPS", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_messageFinalizationWindowInRewardEpochs", - "type": "uint32" } ], "stateMutability": "nonpayable", @@ -164,32 +193,50 @@ "type": "event" }, { - "inputs": [ + "inputs": [], + "name": "feeCollectionAddress", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRandomNumber", + "outputs": [ { "internalType": "uint256", - "name": "_protocolId", + "name": "_randomNumber", "type": "uint256" }, + { + "internalType": "bool", + "name": "_isSecureRandom", + "type": "bool" + }, { "internalType": "uint256", - "name": "_votingRoundId", + "name": "_randomTimestamp", "type": "uint256" } ], - "name": "getConfirmedMerkleRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "getRandomNumber", + "inputs": [ + { + "internalType": "uint256", + "name": "_votingRoundId", + "type": "uint256" + } + ], + "name": "getRandomNumberHistorical", "outputs": [ { "internalType": "uint256", @@ -229,6 +276,77 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_relayMessage", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "protocolId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeInWei", + "type": "uint256" + } + ], + "internalType": "struct IRelay.FeeConfig[]", + "name": "newFeeConfigs", + "type": "tuple[]" + } + ], + "internalType": "struct IRelay.RelayGovernanceConfig", + "name": "_config", + "type": "tuple" + } + ], + "name": "governanceFeeSetup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_protocolId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_votingRoundId", + "type": "uint256" + } + ], + "name": "isFinalized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastInitializedRewardEpochData", @@ -251,12 +369,12 @@ "inputs": [ { "internalType": "uint256", - "name": "protocolId", + "name": "_protocolId", "type": "uint256" }, { "internalType": "uint256", - "name": "votingRoundId", + "name": "_votingRoundId", "type": "uint256" } ], @@ -264,17 +382,42 @@ "outputs": [ { "internalType": "bytes32", - "name": "", + "name": "_merkleRoot", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "protocolFeeInWei", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "relay", - "outputs": [], + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -428,7 +571,7 @@ "inputs": [ { "internalType": "uint256", - "name": "rewardEpochId", + "name": "_rewardEpochId", "type": "uint256" } ], @@ -442,10 +585,68 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_protocolId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_votingRoundId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "_proof", + "type": "bytes32[]" + } + ], + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_relayMessage", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_messageHash", + "type": "bytes32" + } + ], + "name": "verifyCustomSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "_rewardEpochId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200213e3803806200213e833981016040819052620000349162000322565b6127108261ffff161015620000905760405162461bcd60e51b815260206004820152601c60248201527f7468726573686f6c6420696e63726561736520746f6f20736d616c6c0000000060448201526064015b60405180910390fd5b63ffffffff8916620000a761ffff85168c6200041f565b620000b390866200044a565b63ffffffff1611156200011a5760405162461bcd60e51b815260206004820152602860248201527f696e76616c696420696e697469616c207374617274696e6720766f74696e67206044820152671c9bdd5b99081a5960c21b606482015260840162000087565b8a600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089600460000160136101000a81548163ffffffff021916908363ffffffff1602179055508863ffffffff16600260008c63ffffffff16815260200190815260200160002081905550876000808c63ffffffff1681526020019081526020016000208190555086600460000160006101000a81548160ff021916908360ff16021790555085600460000160016101000a81548163ffffffff021916908363ffffffff16021790555084600460000160056101000a81548160ff021916908360ff16021790555083600460000160066101000a81548163ffffffff021916908363ffffffff160217905550826004600001600a6101000a81548161ffff021916908361ffff160217905550816004600001600c6101000a81548161ffff021916908361ffff16021790555080600460000160186101000a81548163ffffffff021916908363ffffffff16021790555060006001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b031614620002d2576004805460ff60b81b1916600160b81b1790555b505050505050505050505062000471565b805163ffffffff81168114620002f857600080fd5b919050565b805160ff81168114620002f857600080fd5b805161ffff81168114620002f857600080fd5b60008060008060008060008060008060006101608c8e0312156200034557600080fd5b8b516001600160a01b03811681146200035d57600080fd5b9a506200036d60208d01620002e3565b99506200037d60408d01620002e3565b985060608c015197506200039460808d01620002fd565b9650620003a460a08d01620002e3565b9550620003b460c08d01620002fd565b9450620003c460e08d01620002e3565b9350620003d56101008d016200030f565b9250620003e66101208d016200030f565b9150620003f76101408d01620002e3565b90509295989b509295989b9093969950565b634e487b7160e01b600052601160045260246000fd5b63ffffffff81811683821602808216919082811462000442576200044262000409565b505092915050565b63ffffffff8181168382160190808211156200046a576200046a62000409565b5092915050565b611cbd80620004816000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638353412511610071578063835341251461022c5780638af0c3071461023f578063a9dbe8ed1461027b578063ab97db37146102a6578063b59589d1146102b9578063dbdff2c1146102c357600080fd5b80630c85bf07146100ae5780631e8fb36a146100e157806322c3f6fa146101ce57806339436b00146101e15780637297c0a21461020c575b600080fd5b6100ce6100bc3660046117d1565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6004546101619060ff8082169163ffffffff61010082048116926501000000000083048116926601000000000000810483169261ffff600160501b8304811693600160601b840490911692600160701b8104831692600160901b8204831692600160981b8304821692600160b81b810490911691600160c01b909104168b565b6040805160ff9c8d16815263ffffffff9b8c1660208201529b909916988b019890985295881660608a015261ffff94851660808a01529390921660a0880152851660c0870152151560e08601528316610100850152151561012084015216610140820152610160016100d8565b6100ce6101dc3660046117ea565b6102e6565b6100ce6101ef3660046117ea565b600160209081526000928352604080842090915290825290205481565b6100ce61021a3660046117d1565b60026020526000908152604090205481565b6100ce61023a3660046119bc565b610327565b600454600160981b900463ffffffff166000818152600260205260409020546040805163ffffffff9384168152929091166020830152016100d8565b60035461028e906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6100ce6102b43660046117d1565b610c57565b6102c1610cd9565b005b6102cb611753565b604080519384529115156020840152908201526060016100d8565b6000826000036103055750600081815260208190526040902054610321565b5060008281526001602090815260408083208484529091529020545b92915050565b6003546000906001600160a01b031633146103895760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79207369676e20706f6c6963792073657474657200000000000000000060448201526064015b60405180910390fd5b815160045462ffffff909116906103ae90600160981b900463ffffffff166001611aa0565b63ffffffff16146103f95760405162461bcd60e51b81526020600482015260156024820152740dcdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b6044820152606401610380565b6000826080015151116104445760405162461bcd60e51b81526020600482015260136024820152721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b6044820152606401610380565b61012c826080015151111561048d5760405162461bcd60e51b815260206004820152600f60248201526e746f6f206d616e7920766f7465727360881b6044820152606401610380565b8160a0015151826080015151146104d65760405162461bcd60e51b815260206004820152600d60248201526c0e6d2f4ca40dad2e6dac2e8c6d609b1b6044820152606401610380565b6000805b8360a0015151811015610528578360a0015181815181106104fd576104fd611ac4565b602002602001015161ffff16826105149190611ada565b91508061052081611aed565b9150506104da565b506201000081106105725760405162461bcd60e51b8152602060048201526014602482015273746f74616c2077656967687420746f6f2062696760601b6044820152606401610380565b61057e61138882611b06565b612710846040015161ffff166105949190611b06565b10156105d85760405162461bcd60e51b81526020600482015260136024820152721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b6044820152606401610380565b6105e46119c882611b06565b612710846040015161ffff166105fa9190611b06565b111561063c5760405162461bcd60e51b81526020600482015260116024820152701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b6044820152606401610380565b600060168460800151516106509190611b06565b61065b90602b611ada565b67ffffffffffffffff8111156106735761067361180c565b6040519080825280601f01601f19166020018201604052801561069d576020820181803683370190505b5090506106f26040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000801916815260200160008152602001600081525090565b600085608001515160f01b866000015160e81b876020015160e01b886040015160f01b896060015160001b8a6080015160008151811061073457610734611ac4565b602002602001015160601b60088c60a0015160008151811061075857610758611ac4565b6020908102919091018101516040516001600160f01b0319998a16928101929092526001600160e81b031990971660228201526001600160e01b03199095166025860152959092166029840152602b8301526bffffffffffffffffffffffff1916604b8201526001600160f81b031961ffff90921690921c60f81b16605f82015260600160405160208183030381529060405290505b6040826101000151101561086557808261010001518151811061081357610813611ac4565b602001015160f81c60f81b838361010001518151811061083557610835611ac4565b60200101906001600160f81b031916908160001a905350610100820180519061085d82611aed565b9052506107ee565b805160208083019190912060008085526001928501839052604085019290925260608401919091525b60808701515183511015610b9f5760006080840181905260c0840181905260a08401525b602083608001511080156108cb57506080870151518351105b15610ada576040830151835110156109ca5760208301516108ed906002611b1d565b60a080850191909152602084015160e08501528701518351815160009260f0929091811061091d5761091d611ac4565b602002602001015161ffff16901b60001b905060208460a0015185608001516109469190611ada565b111561097c57608084015161095c906020611b1d565b60a08501819052602085018051610974908390611ada565b905250610993565b6000602085015283518461098f82611aed565b9052505b60808401516109a3906008611b06565b60e08501516109b3906008611b06565b60c0860180519390911b90911c9091179052610abc565b60608301516109da906014611b1d565b60a084015260608084015160e08501526080880151604085015181516000939291908110610a0a57610a0a611ac4565b60200260200101516001600160a01b0316901b60001b905060208460a001518560800151610a389190611ada565b1115610a6e576080840151610a4e906020611b1d565b60a08501819052606085018051610a66908390611ada565b905250610a89565b6000606085015260408401805190610a8582611aed565b9052505b6080840151610a99906008611b06565b60e0850151610aa9906008611b06565b60c0860180519390911b90911c90911790525b8260a0015183608001818151610ad29190611ada565b9052506108b2565b608083015115610b9a5760c0830151604051610b03918391602001918252602082015260400190565b60405160208183030381529060405280519060200120905060005b8360800151811015610b98578360c001518160208110610b4057610b40611ac4565b1a60f81b8585610100015181518110610b5b57610b5b611ac4565b60200101906001600160f81b031916908160001a9053506101008401805190610b8382611aed565b90525080610b9081611aed565b915050610b1e565b505b61088e565b865162ffffff9081166000908152602081815260408083208590558a516004805463ffffffff60981b1916918616600160981b8102929092179055828c01805191855260029093529281902063ffffffff90931690925589519051828b015160608c015160808d015160a08e0151955194909616957f91d0280e969157fc6c5b8f952f237b03d934b18534dafcac839075bbc33522f895610c43958c904290611bb5565b60405180910390a29450505050505b919050565b600454600090610100900463ffffffff16821015610caa5760405162461bcd60e51b815260206004820152601060248201526f1899599bdc99481d1a19481cdd185c9d60821b6044820152606401610380565b60045465010000000000810460ff1690610ccf90610100900463ffffffff1684611b1d565b6103219190611c65565b610eb3565b62461bcd60e51b815260206004820152826024820152816044820152606481fd5b6000603082901c63ffffffff1680841015610d4257610d4260177f496e76616c696420766f74696e6720726f756e64206964000000000000000000604051610cde565b605083901c61ffff1693039290920492915050565b602082823760006020808504028301602084015b81811015610d89576020816020860137604084208452602001610d6b565b5060208506610d9757825191505b601f851615610dbb5760006020840152602085068160208501376040832080845291505b509392505050565b60068260040182375160d81c63ffffffff16919050565b600080603f8501604885901c61ffff165b80831015610e1557600085526002601684028301601e870137845184019350600183019250610deb565b50505061ffff811115610e4557610e45601473746f74616c2077656967687420746f6f2062696760601b84610cde565b61ffff8316611388820261271082021015610e7c57610e7c6013721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b85610cde565b6119c8820261271082021115610eac57610eac6011701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b85610cde565b5050505050565b60405160045460a0820152600f361015610ef357610ef3601c7f496e76616c6964207369676e20706f6c696379206d657461646174610000000083610cde565b600b60048237805160a81c610f0e62ffffff603083901c1690565b6016604883901c61ffff1602602b0160018101600401361015610f5757610f57601a7f496e76616c6964207369676e20706f6c696379206c656e67746800000000000086610cde565b610f6381600486610d57565b6040858101829052838652600060208701528520546060860181905214610fb057610fb0601c7f5369676e696e6720706f6c6963792068617368206d69736d617463680000000086610cde565b6001816004018537835160f81c600061ffff851682156111a457604051602a8501925036831115610ffb57610ffb601170546f6f2073686f7274206d65737361676560781b83610cde565b6026856004018237805160d81c63ffffffff166060820185815260016080840190815260408083209091528282529020541561104f5761104f600f6e105b1c9958591e481c995b185e5959608a1b84610cde565b61105d8160a0840151610cff565b8781101561109157611091601e7f57726f6e67207369676e20706f6c696379207265776172642065706f6368000085610cde565b60a083015160981c63ffffffff1660a084015160c01c63ffffffff16820110156110d3576110d3600f6e13595cdcd859d9481d1bdbc81bdb19608a1b85610cde565b601089901c63ffffffff16808310156111085761110860137244656c61796564207369676e20706f6c69637960681b86610cde565b50878111156111975760a083015160981c63ffffffff168881111561117857600189016060850152600260808501526040606085012054806001850111156111765761117660187f4d75737420757365206e6577207369676e20706f6c696379000000000000000087610cde565b505b8881036111955760a08401516127109060601c61ffff1686020494505b505b5050602681206020820152505b826114225760405160a0015160009060b81c60ff1611156111ed576111ed601a7f5369676e20706f6c6963792072656c61792064697361626c6564000000000000604051610cde565b601084013610156112265761122660177f4e6f206e6577207369676e20706f6c6963792073697a65000000000000000000604051610cde565b600b84600101600401604051376040515160a881901c9060f01c80611269576112696013721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b604051610cde565b61012c81111561129357611293600f6e746f6f206d616e7920766f7465727360881b604051610cde565b60168102602b0190508060010186016004019350833610156112dd576112dd601e7f57726f6e672073697a6520666f72206e6577207369676e20706f6c6963790000604051610cde565b603082901c62ffffff1660405160a0015160981c63ffffffff1688811461132c5761132c60187f4e6f742077697468206c61737420696e7469616c697a65640000000000000000604051610cde565b81816001011461135c5761135c60157409cdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b604051610cde565b506113708760010160040184604051610dda565b6113838260018901600401604051610d57565b60405160a0015190925063ffffffff60981b1916609882901b1760a0604051015280604051526002602060405101526113c363ffffffff601085901c1690565b60408051205580604051526000602060405101528160408051205581602060405101527f5369676e696e67506f6c69637952656c617965642875696e74323536290000006060604051015280601d606060405101206000604051a25050505b6002820136101561144e5761144e601271139bc81cda59db985d1d5c994818dbdd5b9d60721b89610cde565b6002826040890137604087015160f01c9450600282810192604387020101361015611497576114976015744e6f7420656e6f756768207369676e61747572657360581b89610cde565b7f3030303019457468657265756d205369676e6564204d6573736167653a0a33328752603c60048801208752604886901c61ffff16965060008060006040515b8884101561170a576000602082015260438481028701603f830137608081015160f01c8b60018201111561152657611526601271496e646578206f7574206f662072616e676560701b84610cde565b8281101561154f5761154f60127124b73232bc1037baba1037b31037b93232b960711b84610cde565b6001810192506020604083016080846001600019fa61158657611586600f6e32b1b932b1b7bb32b91032b93937b960891b84610cde565b600060608301526016602f82820201606a84013750606081015160026008021c6040820151146115ce576115ce600f6e57726f6e67207369676e617475726560881b83610cde565b61ffff60608201511683019250848311156116ff57866115f15760a08101516004555b86156102c1576116018882610dc3565b6020600a8a0160c0840137878252600160208301908152604080842090915281835260c08301519083205560a082015160ff1688036102c15760a082015163ffffffff60701b1916607082901b1760a08301526006896004018337815160d01c8083526116819060ff1660a084015160ff60901b191660909190911b1790565b600481905560901c60ff1660a083019081527f50726f746f636f6c4d65737361676552656c617965642875696e74382c75696e6060840152707433322c626f6f6c2c627974657333322960781b6080840152819089907f4b781cfef3123d9257ab69e6e8ea36ad75a346d63c5ecf8a46931a0eef48bb9e90604090a3005b6001840193506114d7565b505060405162461bcd60e51b8152602060048201526011602482015270139bdd08195b9bdd59da081dd95a59da1d607a1b60448201526064019850610380975050505050505050565b60045460ff808216600090815260016020818152604080842063ffffffff600160701b880416808652925283205494600160901b81048516946501000000000090910416916117a29190611aa0565b63ffffffff166117b29190611b06565b6004546117ca9190610100900463ffffffff16611ada565b9050909192565b6000602082840312156117e357600080fd5b5035919050565b600080604083850312156117fd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156118455761184561180c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118745761187461180c565b604052919050565b803562ffffff81168114610c5257600080fd5b803563ffffffff81168114610c5257600080fd5b803561ffff81168114610c5257600080fd5b600067ffffffffffffffff8211156118cf576118cf61180c565b5060051b60200190565b600082601f8301126118ea57600080fd5b813560206118ff6118fa836118b5565b61184b565b82815260059290921b8401810191818101908684111561191e57600080fd5b8286015b8481101561194f5780356001600160a01b03811681146119425760008081fd5b8352918301918301611922565b509695505050505050565b600082601f83011261196b57600080fd5b8135602061197b6118fa836118b5565b82815260059290921b8401810191818101908684111561199a57600080fd5b8286015b8481101561194f576119af816118a3565b835291830191830161199e565b6000602082840312156119ce57600080fd5b813567ffffffffffffffff808211156119e657600080fd5b9083019060c082860312156119fa57600080fd5b611a02611822565b611a0b8361187c565b8152611a196020840161188f565b6020820152611a2a604084016118a3565b604082015260608301356060820152608083013582811115611a4b57600080fd5b611a57878286016118d9565b60808301525060a083013582811115611a6f57600080fd5b611a7b8782860161195a565b60a08301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115611abd57611abd611a8a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561032157610321611a8a565b600060018201611aff57611aff611a8a565b5060010190565b808202811582820484141761032157610321611a8a565b8181038181111561032157610321611a8a565b600081518084526020808501945080840160005b83811015611b6457815161ffff1687529582019590820190600101611b44565b509495945050505050565b6000815180845260005b81811015611b9557602081850181015186830182015201611b79565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0820163ffffffff8a168352602061ffff8a168185015288604085015260e0606085015281885180845261010086019150828a01935060005b81811015611c165784516001600160a01b031683529383019391830191600101611bf1565b50508481036080860152611c2a8189611b30565b9250505082810360a0840152611c408186611b6f565b915050611c5960c083018467ffffffffffffffff169052565b98975050505050505050565b600082611c8257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212206a926782f150372841e6c7fa2e8e26044e9fd85c557bf739cae65fa21d6fd42664736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638353412511610071578063835341251461022c5780638af0c3071461023f578063a9dbe8ed1461027b578063ab97db37146102a6578063b59589d1146102b9578063dbdff2c1146102c357600080fd5b80630c85bf07146100ae5780631e8fb36a146100e157806322c3f6fa146101ce57806339436b00146101e15780637297c0a21461020c575b600080fd5b6100ce6100bc3660046117d1565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6004546101619060ff8082169163ffffffff61010082048116926501000000000083048116926601000000000000810483169261ffff600160501b8304811693600160601b840490911692600160701b8104831692600160901b8204831692600160981b8304821692600160b81b810490911691600160c01b909104168b565b6040805160ff9c8d16815263ffffffff9b8c1660208201529b909916988b019890985295881660608a015261ffff94851660808a01529390921660a0880152851660c0870152151560e08601528316610100850152151561012084015216610140820152610160016100d8565b6100ce6101dc3660046117ea565b6102e6565b6100ce6101ef3660046117ea565b600160209081526000928352604080842090915290825290205481565b6100ce61021a3660046117d1565b60026020526000908152604090205481565b6100ce61023a3660046119bc565b610327565b600454600160981b900463ffffffff166000818152600260205260409020546040805163ffffffff9384168152929091166020830152016100d8565b60035461028e906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6100ce6102b43660046117d1565b610c57565b6102c1610cd9565b005b6102cb611753565b604080519384529115156020840152908201526060016100d8565b6000826000036103055750600081815260208190526040902054610321565b5060008281526001602090815260408083208484529091529020545b92915050565b6003546000906001600160a01b031633146103895760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79207369676e20706f6c6963792073657474657200000000000000000060448201526064015b60405180910390fd5b815160045462ffffff909116906103ae90600160981b900463ffffffff166001611aa0565b63ffffffff16146103f95760405162461bcd60e51b81526020600482015260156024820152740dcdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b6044820152606401610380565b6000826080015151116104445760405162461bcd60e51b81526020600482015260136024820152721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b6044820152606401610380565b61012c826080015151111561048d5760405162461bcd60e51b815260206004820152600f60248201526e746f6f206d616e7920766f7465727360881b6044820152606401610380565b8160a0015151826080015151146104d65760405162461bcd60e51b815260206004820152600d60248201526c0e6d2f4ca40dad2e6dac2e8c6d609b1b6044820152606401610380565b6000805b8360a0015151811015610528578360a0015181815181106104fd576104fd611ac4565b602002602001015161ffff16826105149190611ada565b91508061052081611aed565b9150506104da565b506201000081106105725760405162461bcd60e51b8152602060048201526014602482015273746f74616c2077656967687420746f6f2062696760601b6044820152606401610380565b61057e61138882611b06565b612710846040015161ffff166105949190611b06565b10156105d85760405162461bcd60e51b81526020600482015260136024820152721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b6044820152606401610380565b6105e46119c882611b06565b612710846040015161ffff166105fa9190611b06565b111561063c5760405162461bcd60e51b81526020600482015260116024820152701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b6044820152606401610380565b600060168460800151516106509190611b06565b61065b90602b611ada565b67ffffffffffffffff8111156106735761067361180c565b6040519080825280601f01601f19166020018201604052801561069d576020820181803683370190505b5090506106f26040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000801916815260200160008152602001600081525090565b600085608001515160f01b866000015160e81b876020015160e01b886040015160f01b896060015160001b8a6080015160008151811061073457610734611ac4565b602002602001015160601b60088c60a0015160008151811061075857610758611ac4565b6020908102919091018101516040516001600160f01b0319998a16928101929092526001600160e81b031990971660228201526001600160e01b03199095166025860152959092166029840152602b8301526bffffffffffffffffffffffff1916604b8201526001600160f81b031961ffff90921690921c60f81b16605f82015260600160405160208183030381529060405290505b6040826101000151101561086557808261010001518151811061081357610813611ac4565b602001015160f81c60f81b838361010001518151811061083557610835611ac4565b60200101906001600160f81b031916908160001a905350610100820180519061085d82611aed565b9052506107ee565b805160208083019190912060008085526001928501839052604085019290925260608401919091525b60808701515183511015610b9f5760006080840181905260c0840181905260a08401525b602083608001511080156108cb57506080870151518351105b15610ada576040830151835110156109ca5760208301516108ed906002611b1d565b60a080850191909152602084015160e08501528701518351815160009260f0929091811061091d5761091d611ac4565b602002602001015161ffff16901b60001b905060208460a0015185608001516109469190611ada565b111561097c57608084015161095c906020611b1d565b60a08501819052602085018051610974908390611ada565b905250610993565b6000602085015283518461098f82611aed565b9052505b60808401516109a3906008611b06565b60e08501516109b3906008611b06565b60c0860180519390911b90911c9091179052610abc565b60608301516109da906014611b1d565b60a084015260608084015160e08501526080880151604085015181516000939291908110610a0a57610a0a611ac4565b60200260200101516001600160a01b0316901b60001b905060208460a001518560800151610a389190611ada565b1115610a6e576080840151610a4e906020611b1d565b60a08501819052606085018051610a66908390611ada565b905250610a89565b6000606085015260408401805190610a8582611aed565b9052505b6080840151610a99906008611b06565b60e0850151610aa9906008611b06565b60c0860180519390911b90911c90911790525b8260a0015183608001818151610ad29190611ada565b9052506108b2565b608083015115610b9a5760c0830151604051610b03918391602001918252602082015260400190565b60405160208183030381529060405280519060200120905060005b8360800151811015610b98578360c001518160208110610b4057610b40611ac4565b1a60f81b8585610100015181518110610b5b57610b5b611ac4565b60200101906001600160f81b031916908160001a9053506101008401805190610b8382611aed565b90525080610b9081611aed565b915050610b1e565b505b61088e565b865162ffffff9081166000908152602081815260408083208590558a516004805463ffffffff60981b1916918616600160981b8102929092179055828c01805191855260029093529281902063ffffffff90931690925589519051828b015160608c015160808d015160a08e0151955194909616957f91d0280e969157fc6c5b8f952f237b03d934b18534dafcac839075bbc33522f895610c43958c904290611bb5565b60405180910390a29450505050505b919050565b600454600090610100900463ffffffff16821015610caa5760405162461bcd60e51b815260206004820152601060248201526f1899599bdc99481d1a19481cdd185c9d60821b6044820152606401610380565b60045465010000000000810460ff1690610ccf90610100900463ffffffff1684611b1d565b6103219190611c65565b610eb3565b62461bcd60e51b815260206004820152826024820152816044820152606481fd5b6000603082901c63ffffffff1680841015610d4257610d4260177f496e76616c696420766f74696e6720726f756e64206964000000000000000000604051610cde565b605083901c61ffff1693039290920492915050565b602082823760006020808504028301602084015b81811015610d89576020816020860137604084208452602001610d6b565b5060208506610d9757825191505b601f851615610dbb5760006020840152602085068160208501376040832080845291505b509392505050565b60068260040182375160d81c63ffffffff16919050565b600080603f8501604885901c61ffff165b80831015610e1557600085526002601684028301601e870137845184019350600183019250610deb565b50505061ffff811115610e4557610e45601473746f74616c2077656967687420746f6f2062696760601b84610cde565b61ffff8316611388820261271082021015610e7c57610e7c6013721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b85610cde565b6119c8820261271082021115610eac57610eac6011701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b85610cde565b5050505050565b60405160045460a0820152600f361015610ef357610ef3601c7f496e76616c6964207369676e20706f6c696379206d657461646174610000000083610cde565b600b60048237805160a81c610f0e62ffffff603083901c1690565b6016604883901c61ffff1602602b0160018101600401361015610f5757610f57601a7f496e76616c6964207369676e20706f6c696379206c656e67746800000000000086610cde565b610f6381600486610d57565b6040858101829052838652600060208701528520546060860181905214610fb057610fb0601c7f5369676e696e6720706f6c6963792068617368206d69736d617463680000000086610cde565b6001816004018537835160f81c600061ffff851682156111a457604051602a8501925036831115610ffb57610ffb601170546f6f2073686f7274206d65737361676560781b83610cde565b6026856004018237805160d81c63ffffffff166060820185815260016080840190815260408083209091528282529020541561104f5761104f600f6e105b1c9958591e481c995b185e5959608a1b84610cde565b61105d8160a0840151610cff565b8781101561109157611091601e7f57726f6e67207369676e20706f6c696379207265776172642065706f6368000085610cde565b60a083015160981c63ffffffff1660a084015160c01c63ffffffff16820110156110d3576110d3600f6e13595cdcd859d9481d1bdbc81bdb19608a1b85610cde565b601089901c63ffffffff16808310156111085761110860137244656c61796564207369676e20706f6c69637960681b86610cde565b50878111156111975760a083015160981c63ffffffff168881111561117857600189016060850152600260808501526040606085012054806001850111156111765761117660187f4d75737420757365206e6577207369676e20706f6c696379000000000000000087610cde565b505b8881036111955760a08401516127109060601c61ffff1686020494505b505b5050602681206020820152505b826114225760405160a0015160009060b81c60ff1611156111ed576111ed601a7f5369676e20706f6c6963792072656c61792064697361626c6564000000000000604051610cde565b601084013610156112265761122660177f4e6f206e6577207369676e20706f6c6963792073697a65000000000000000000604051610cde565b600b84600101600401604051376040515160a881901c9060f01c80611269576112696013721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b604051610cde565b61012c81111561129357611293600f6e746f6f206d616e7920766f7465727360881b604051610cde565b60168102602b0190508060010186016004019350833610156112dd576112dd601e7f57726f6e672073697a6520666f72206e6577207369676e20706f6c6963790000604051610cde565b603082901c62ffffff1660405160a0015160981c63ffffffff1688811461132c5761132c60187f4e6f742077697468206c61737420696e7469616c697a65640000000000000000604051610cde565b81816001011461135c5761135c60157409cdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b604051610cde565b506113708760010160040184604051610dda565b6113838260018901600401604051610d57565b60405160a0015190925063ffffffff60981b1916609882901b1760a0604051015280604051526002602060405101526113c363ffffffff601085901c1690565b60408051205580604051526000602060405101528160408051205581602060405101527f5369676e696e67506f6c69637952656c617965642875696e74323536290000006060604051015280601d606060405101206000604051a25050505b6002820136101561144e5761144e601271139bc81cda59db985d1d5c994818dbdd5b9d60721b89610cde565b6002826040890137604087015160f01c9450600282810192604387020101361015611497576114976015744e6f7420656e6f756768207369676e61747572657360581b89610cde565b7f3030303019457468657265756d205369676e6564204d6573736167653a0a33328752603c60048801208752604886901c61ffff16965060008060006040515b8884101561170a576000602082015260438481028701603f830137608081015160f01c8b60018201111561152657611526601271496e646578206f7574206f662072616e676560701b84610cde565b8281101561154f5761154f60127124b73232bc1037baba1037b31037b93232b960711b84610cde565b6001810192506020604083016080846001600019fa61158657611586600f6e32b1b932b1b7bb32b91032b93937b960891b84610cde565b600060608301526016602f82820201606a84013750606081015160026008021c6040820151146115ce576115ce600f6e57726f6e67207369676e617475726560881b83610cde565b61ffff60608201511683019250848311156116ff57866115f15760a08101516004555b86156102c1576116018882610dc3565b6020600a8a0160c0840137878252600160208301908152604080842090915281835260c08301519083205560a082015160ff1688036102c15760a082015163ffffffff60701b1916607082901b1760a08301526006896004018337815160d01c8083526116819060ff1660a084015160ff60901b191660909190911b1790565b600481905560901c60ff1660a083019081527f50726f746f636f6c4d65737361676552656c617965642875696e74382c75696e6060840152707433322c626f6f6c2c627974657333322960781b6080840152819089907f4b781cfef3123d9257ab69e6e8ea36ad75a346d63c5ecf8a46931a0eef48bb9e90604090a3005b6001840193506114d7565b505060405162461bcd60e51b8152602060048201526011602482015270139bdd08195b9bdd59da081dd95a59da1d607a1b60448201526064019850610380975050505050505050565b60045460ff808216600090815260016020818152604080842063ffffffff600160701b880416808652925283205494600160901b81048516946501000000000090910416916117a29190611aa0565b63ffffffff166117b29190611b06565b6004546117ca9190610100900463ffffffff16611ada565b9050909192565b6000602082840312156117e357600080fd5b5035919050565b600080604083850312156117fd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156118455761184561180c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118745761187461180c565b604052919050565b803562ffffff81168114610c5257600080fd5b803563ffffffff81168114610c5257600080fd5b803561ffff81168114610c5257600080fd5b600067ffffffffffffffff8211156118cf576118cf61180c565b5060051b60200190565b600082601f8301126118ea57600080fd5b813560206118ff6118fa836118b5565b61184b565b82815260059290921b8401810191818101908684111561191e57600080fd5b8286015b8481101561194f5780356001600160a01b03811681146119425760008081fd5b8352918301918301611922565b509695505050505050565b600082601f83011261196b57600080fd5b8135602061197b6118fa836118b5565b82815260059290921b8401810191818101908684111561199a57600080fd5b8286015b8481101561194f576119af816118a3565b835291830191830161199e565b6000602082840312156119ce57600080fd5b813567ffffffffffffffff808211156119e657600080fd5b9083019060c082860312156119fa57600080fd5b611a02611822565b611a0b8361187c565b8152611a196020840161188f565b6020820152611a2a604084016118a3565b604082015260608301356060820152608083013582811115611a4b57600080fd5b611a57878286016118d9565b60808301525060a083013582811115611a6f57600080fd5b611a7b8782860161195a565b60a08301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115611abd57611abd611a8a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561032157610321611a8a565b600060018201611aff57611aff611a8a565b5060010190565b808202811582820484141761032157610321611a8a565b8181038181111561032157610321611a8a565b600081518084526020808501945080840160005b83811015611b6457815161ffff1687529582019590820190600101611b44565b509495945050505050565b6000815180845260005b81811015611b9557602081850181015186830182015201611b79565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0820163ffffffff8a168352602061ffff8a168185015288604085015260e0606085015281885180845261010086019150828a01935060005b81811015611c165784516001600160a01b031683529383019391830191600101611bf1565b50508481036080860152611c2a8189611b30565b9250505082810360a0840152611c408186611b6f565b915050611c5960c083018467ffffffffffffffff169052565b98975050505050505050565b600082611c8257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212206a926782f150372841e6c7fa2e8e26044e9fd85c557bf739cae65fa21d6fd42664736f6c63430008140033", + "bytecode": "0x60806040523480156200001157600080fd5b506040516200329d3803806200329d83398101604081905262000034916200060f565b61271082610100015161ffff161015620000955760405162461bcd60e51b815260206004820152601c60248201527f7468726573686f6c6420696e63726561736520746f6f20736d616c6c0000000060448201526064015b60405180910390fd5b816020015163ffffffff168260e0015161ffff168360000151620000ba91906200077c565b8360c00151620000cb9190620007a7565b63ffffffff161115620001325760405162461bcd60e51b815260206004820152602860248201527f696e76616c696420696e697469616c207374617274696e6720766f74696e67206044820152671c9bdd5b99081a5960c21b60648201526084016200008c565b600380546001600160a01b0319166001600160a01b03831617905581516007805463ffffffff60981b1916600160981b63ffffffff9384169081029190911790915560208085015160009283526002825260408084209185169091558086015186519094168352908290529020556060820151600160ff90911611620002095760405162461bcd60e51b815260206004820152602560248201527f72616e646f6d206e756d6265722070726f746f636f6c206964206d757374206260448201526465203e203160d81b60648201526084016200008c565b606082015160078054608085015160a086015160c087015160e0880151610100808a01516101208b015163ffffffff908116600160c01b0263ffffffff60c01b1961ffff9384166c010000000000000000000000000261ffff60601b19949096166a0100000000000000000000029390931663ffffffff60501b1996831666010000000000000263ffffffff60301b1960ff998a1665010000000000021664ffffffffff60281b1994909a1690950264ffffffffff19909a1697909b169690961797909717969096169490941793909317169490941717169190911790556001600160a01b0381161562000355576101608201515115620003415760405162461bcd60e51b81526020600482015260116024820152701999594818d85b9b9bdd081899481cd95d607a1b60448201526064016200008c565b6007805460ff60b81b1916600160b81b1790555b610140820151600580546001600160a01b0319166001600160a01b0390921691909117905560005b826101600151518110156200045d5760008361016001518281518110620003a857620003a8620007ce565b602002602001015160000151905060018160ff16116200040b5760405162461bcd60e51b815260206004820152601360248201527f696e76616c69642070726f746f636f6c2069640000000000000000000000000060448201526064016200008c565b8361016001518281518110620004255762000425620007ce565b60209081029190910181015181015160ff909216600090815260049091526040902055806200045481620007e4565b9150506200037d565b50505062000800565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620004a157620004a162000466565b60405290565b60405161018081016001600160401b0381118282101715620004a157620004a162000466565b604051601f8201601f191681016001600160401b0381118282101715620004f857620004f862000466565b604052919050565b805163ffffffff811681146200051557600080fd5b919050565b805160ff811681146200051557600080fd5b805161ffff811681146200051557600080fd5b80516001600160a01b03811681146200051557600080fd5b600082601f8301126200056957600080fd5b815160206001600160401b0382111562000587576200058762000466565b62000597818360051b01620004cd565b82815260069290921b84018101918181019086841115620005b757600080fd5b8286015b84811015620006045760408189031215620005d65760008081fd5b620005e06200047c565b620005eb826200051a565b81528185015185820152835291830191604001620005bb565b509695505050505050565b600080604083850312156200062357600080fd5b82516001600160401b03808211156200063b57600080fd5b9084019061018082870312156200065157600080fd5b6200065b620004a7565b620006668362000500565b8152620006766020840162000500565b60208201526040830151604082015262000693606084016200051a565b6060820152620006a66080840162000500565b6080820152620006b960a084016200051a565b60a0820152620006cc60c0840162000500565b60c0820152620006df60e084016200052c565b60e0820152610100620006f48185016200052c565b908201526101206200070884820162000500565b908201526101406200071c8482016200053f565b9082015261016083810151838111156200073557600080fd5b620007438982870162000557565b8284015250508094505050506200075d602084016200053f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff8181168382160280821691908281146200079f576200079f62000766565b505092915050565b63ffffffff818116838216019080821115620007c757620007c762000766565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201620007f957620007f962000766565b5060010190565b612a8d80620008106000396000f3fe6080604052600436106100fe5760003560e01c80638353412511610095578063a87f143811610064578063a87f1438146103ce578063a9dbe8ed14610409578063ab97db3714610429578063b59589d114610449578063dbdff2c11461046b57600080fd5b806383534125146103185780638af0c3071461033857806391e7d42f146103815780639932185e146103ae57600080fd5b806339436b00116100d157806339436b00146102965780637297c0a2146102b6578063808506aa146102e35780638275ae58146102f657600080fd5b80630c85bf07146101035780631e8fb36a14610136578063317ad33c1461022e578063377c50d41461025e575b600080fd5b34801561010f57600080fd5b5061012361011e366004612298565b610480565b6040519081526020015b60405180910390f35b34801561014257600080fd5b506007546101c19060ff8082169163ffffffff6101008204811692600160281b83048116926601000000000000810483169261ffff600160501b8304811693600160601b840490911692600160701b8104831692600160901b8204831692600160981b8304821692600160b81b810490911691600160c01b909104168b565b6040805160ff9c8d16815263ffffffff9b8c1660208201529b909916988b019890985295881660608a015261ffff94851660808a01529390921660a0880152851660c0870152151560e086015283166101008501521515610120840152166101408201526101600161012d565b34801561023a57600080fd5b5061024e6102493660046122b1565b6104fe565b604051901515815260200161012d565b34801561026a57600080fd5b5060055461027e906001600160a01b031681565b6040516001600160a01b03909116815260200161012d565b3480156102a257600080fd5b506101236102b13660046122b1565b610521565b3480156102c257600080fd5b506101236102d1366004612298565b60026020526000908152604090205481565b61024e6102f13660046122d3565b61059a565b34801561030257600080fd5b506103166103113660046123ac565b610742565b005b34801561032457600080fd5b506101236103333660046125cc565b6109ea565b34801561034457600080fd5b50600754600160981b900463ffffffff166000818152600260205260409020546040805163ffffffff93841681529290911660208301520161012d565b34801561038d57600080fd5b5061012361039c366004612298565b60046020526000908152604090205481565b3480156103ba57600080fd5b506101236103c936600461269a565b611315565b3480156103da57600080fd5b506103ee6103e9366004612298565b61132a565b6040805193845291151560208401529082015260600161012d565b34801561041557600080fd5b5060035461027e906001600160a01b031681565b34801561043557600080fd5b50610123610444366004612298565b61143e565b34801561045557600080fd5b5061045e6114be565b60405161012d919061272c565b34801561047757600080fd5b506103ee612011565b6003546000906001600160a01b03166104eb5760405162461bcd60e51b815260206004820152602260248201527f6e6f2061636365737320746f207369676e696e6720706f6c6963792068617368604482015261657360f01b60648201526084015b60405180910390fd5b5060009081526020819052604090205490565b600082815260016020908152604080832084845290915290205415155b92915050565b6003546000906001600160a01b031661057c5760405162461bcd60e51b815260206004820152601960248201527f6e6f2061636365737320746f206d65726b6c6520726f6f74730000000000000060448201526064016104e2565b50600091825260016020908152604080842092845291905290205490565b6000600186116105e25760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081c1c9bdd1bd8dbdb081a59606a1b60448201526064016104e2565b60008681526004602052604090205434101561062e5760405162461bcd60e51b815260206004820152600b60248201526a746f6f206c6f772066656560a81b60448201526064016104e2565b60008681526001602090815260408083208884529091529020546106569084908490876120ae565b6106995760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b60448201526064016104e2565b3415610736576005546040516000916001600160a01b03169034908381818185875af1925050503d80600081146106ec576040519150601f19603f3d011682016040523d82523d6000602084013e6106f1565b606091505b50509050806107345760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016104e2565b505b50600195945050505050565b6003546001600160a01b03161561078f5760405162461bcd60e51b81526020600482015260116024820152701999594818d85b9b9bdd081899481cd95d607a1b60448201526064016104e2565b468160200135146107d35760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c818da185a5b881a5960921b60448201526064016104e2565b80357fba90a7502e1d792c42ae7da5cf5982d831ebf2254fd5919818faf046187d95d21461083c5760405162461bcd60e51b81526020600482015260166024820152750eee4dedcce40c8cae6c6e4d2e0e8d2dedc40d0c2e6d60531b60448201526064016104e2565b60005b61084c604083018361273f565b905081101561092a576000610864604084018461273f565b8381811061087457610874612789565b61088a92602060409092020190810191506127b0565b905060018160ff16116108d55760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081c1c9bdd1bd8dbdb081a59606a1b60448201526064016104e2565b6108e2604084018461273f565b838181106108f2576108f2612789565b90506040020160200135600460008360ff16815260200190815260200160002081905550508080610922906127e1565b91505061083f565b50600061095e84848460405160200161094391906127fa565b604051602081830303815290604052805190602001206120c6565b600754909150600160981b900463ffffffff1681148061099f5750600754819061099790600190600160981b900463ffffffff166128a8565b63ffffffff16145b6109e45760405162461bcd60e51b8152602060048201526016602482015275746f6f206f6c64207369676e696e6720706f6c69637960501b60448201526064016104e2565b50505050565b6003546000906001600160a01b03163314610a475760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79207369676e20706f6c6963792073657474657200000000000000000060448201526064016104e2565b815160075462ffffff90911690610a6c90600160981b900463ffffffff1660016128cc565b63ffffffff1614610ab75760405162461bcd60e51b81526020600482015260156024820152740dcdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b60448201526064016104e2565b600082608001515111610b025760405162461bcd60e51b81526020600482015260136024820152721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b60448201526064016104e2565b61012c8260800151511115610b4b5760405162461bcd60e51b815260206004820152600f60248201526e746f6f206d616e7920766f7465727360881b60448201526064016104e2565b8160a001515182608001515114610b945760405162461bcd60e51b815260206004820152600d60248201526c0e6d2f4ca40dad2e6dac2e8c6d609b1b60448201526064016104e2565b6000805b8360a0015151811015610be6578360a001518181518110610bbb57610bbb612789565b602002602001015161ffff1682610bd291906128e9565b915080610bde816127e1565b915050610b98565b50620100008110610c305760405162461bcd60e51b8152602060048201526014602482015273746f74616c2077656967687420746f6f2062696760601b60448201526064016104e2565b610c3c611388826128fc565b612710846040015161ffff16610c5291906128fc565b1015610c965760405162461bcd60e51b81526020600482015260136024820152721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b60448201526064016104e2565b610ca26119c8826128fc565b612710846040015161ffff16610cb891906128fc565b1115610cfa5760405162461bcd60e51b81526020600482015260116024820152701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b60448201526064016104e2565b60006016846080015151610d0e91906128fc565b610d1990602b6128e9565b67ffffffffffffffff811115610d3157610d3161241c565b6040519080825280601f01601f191660200182016040528015610d5b576020820181803683370190505b509050610db06040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000801916815260200160008152602001600081525090565b600085608001515160f01b866000015160e81b876020015160e01b886040015160f01b896060015160001b8a60800151600081518110610df257610df2612789565b602002602001015160601b60088c60a00151600081518110610e1657610e16612789565b6020908102919091018101516040516001600160f01b0319998a16928101929092526001600160e81b031990971660228201526001600160e01b03199095166025860152959092166029840152602b8301526bffffffffffffffffffffffff1916604b8201526001600160f81b031961ffff90921690921c60f81b16605f82015260600160405160208183030381529060405290505b60408261010001511015610f23578082610100015181518110610ed157610ed1612789565b602001015160f81c60f81b8383610100015181518110610ef357610ef3612789565b60200101906001600160f81b031916908160001a9053506101008201805190610f1b826127e1565b905250610eac565b805160208083019190912060008085526001928501839052604085019290925260608401919091525b6080870151518351101561125d5760006080840181905260c0840181905260a08401525b60208360800151108015610f8957506080870151518351105b1561119857604083015183511015611088576020830151610fab906002612913565b60a080850191909152602084015160e08501528701518351815160009260f09290918110610fdb57610fdb612789565b602002602001015161ffff16901b60001b905060208460a00151856080015161100491906128e9565b111561103a57608084015161101a906020612913565b60a085018190526020850180516110329083906128e9565b905250611051565b6000602085015283518461104d826127e1565b9052505b60808401516110619060086128fc565b60e08501516110719060086128fc565b60c0860180519390911b90911c909117905261117a565b6060830151611098906014612913565b60a084015260608084015160e085015260808801516040850151815160009392919081106110c8576110c8612789565b60200260200101516001600160a01b0316901b60001b905060208460a0015185608001516110f691906128e9565b111561112c57608084015161110c906020612913565b60a085018190526060850180516111249083906128e9565b905250611147565b6000606085015260408401805190611143826127e1565b9052505b60808401516111579060086128fc565b60e08501516111679060086128fc565b60c0860180519390911b90911c90911790525b8260a001518360800181815161119091906128e9565b905250610f70565b6080830151156112585760c08301516040516111c1918391602001918252602082015260400190565b60405160208183030381529060405280519060200120905060005b8360800151811015611256578360c0015181602081106111fe576111fe612789565b1a60f81b858561010001518151811061121957611219612789565b60200101906001600160f81b031916908160001a9053506101008401805190611241826127e1565b9052508061124e816127e1565b9150506111dc565b505b610f4c565b865162ffffff9081166000908152602081815260408083208590558a516007805463ffffffff60981b1916918616600160981b8102929092179055828c01805191855260029093529281902063ffffffff90931690925589519051828b015160608c015160808d015160a08e0151955194909616957f91d0280e969157fc6c5b8f952f237b03d934b18534dafcac839075bbc33522f895611301958c904290612965565b60405180910390a29450505050505b919050565b60006113228484846120c6565b949350505050565b60075460ff166000908152600160209081526040808320848452909152812054819081908061138e5760405162461bcd60e51b815260206004820152601060248201526f3737903930b73237b690373ab6b132b960811b60448201526064016104e2565b60408051602081018390520160408051601f19818403018152919052805160209091012093506001806113c361010088612a1f565b6113ce9060ff612913565b600660006113de6101008b612a33565b8152602081019190915260400160002054600754911c91909116919091149350600160281b900460ff166114138660016128e9565b61141d91906128fc565b6007546114359190610100900463ffffffff166128e9565b93959294505050565b600754600090610100900463ffffffff168210156114915760405162461bcd60e51b815260206004820152601060248201526f1899599bdc99481d1a19481cdd185c9d60821b60448201526064016104e2565b600754600160281b810460ff16906114b490610100900463ffffffff1684612913565b61051b9190612a33565b60606116a1565b62461bcd60e51b815260206004820152826024820152816044820152606481fd5b6000603082901c63ffffffff16808410156115295761152960177f496e76616c696420766f74696e6720726f756e642069640000000000000000006040516114c5565b605083901c61ffff1693039290920492915050565b602082823760006020808504028301602084015b81811015611570576020816020860137604084208452602001611552565b506020850661157e57825191505b601f8516156115a25760006020840152602085068160208501376040832080845291505b509392505050565b6006826004018237805160009060d81c63ffffffff165b9392505050565b600080603f8501604885901c61ffff165b8083101561160357600085526002601684028301601e8701378451840193506001830192506115d9565b50505061ffff81111561163357611633601473746f74616c2077656967687420746f6f2062696760601b846114c5565b61ffff831661138882026127108202101561166a5761166a6013721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b856114c5565b6119c882026127108202111561169a5761169a6011701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b856114c5565b5050505050565b60405160075460a0820152600f3610156116e1576116e1601c7f496e76616c6964207369676e20706f6c696379206d6574616461746100000000836114c5565b600b60048237805160a81c6116fc62ffffff603083901c1690565b6016604883901c61ffff1602602b016001810160040136101561174557611745601a7f496e76616c6964207369676e20706f6c696379206c656e677468000000000000866114c5565b6117518160048661153e565b604085810182905283865260006020870152852054606086018190521461179e5761179e601c7f5369676e696e6720706f6c6963792068617368206d69736d6174636800000000866114c5565b6001816004018537835160f81c600061ffff85168215611a0657604051602a85019250368311156117e9576117e9601170546f6f2073686f7274206d65737361676560781b836114c5565b6026856004018237805160d81c63ffffffff166060820185815260016080840190815260408083209091528282529020541561183d5761183d600f6e105b1c9958591e481c995b185e5959608a1b846114c5565b6001850361189f57801561186e5761186e60147315dc9bdb99c81b595cdcd859d948199bdc9b585d60621b846114c5565b815160d01c60ff161561189f5761189f6015742bb937b7339036b2b9b9b0b3b2903337b936b0ba1960591b846114c5565b86600186146118b9576118b68260a08501516114e6565b90505b878110156118ed576118ed601e7f57726f6e67207369676e20706f6c696379207265776172642065706f63680000856114c5565b60a083015160981c63ffffffff1660a084015160c01c63ffffffff168201101561192f5761192f600f6e13595cdcd859d9481d1bdbc81bdb19608a1b856114c5565b601089901c63ffffffff168083106001881415161561196a5761196a60137244656c61796564207369676e20706f6c69637960681b866114c5565b50878111156119f95760a083015160981c63ffffffff16888111156119da57600189016060850152600260808501526040606085012054806001850111156119d8576119d860187f4d75737420757365206e6577207369676e20706f6c6963790000000000000000876114c5565b505b8881036119f75760a08401516127109060601c61ffff1686020494505b505b5050602681206020820152505b82611c845760405160a0015160009060b81c60ff161115611a4f57611a4f601a7f5369676e20706f6c6963792072656c61792064697361626c65640000000000006040516114c5565b60108401361015611a8857611a8860177f4e6f206e6577207369676e20706f6c6963792073697a650000000000000000006040516114c5565b600b84600101600401604051376040515160a881901c9060f01c80611acb57611acb6013721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b6040516114c5565b61012c811115611af557611af5600f6e746f6f206d616e7920766f7465727360881b6040516114c5565b60168102602b019050806001018601600401935083361015611b3f57611b3f601e7f57726f6e672073697a6520666f72206e6577207369676e20706f6c69637900006040516114c5565b603082901c62ffffff1660405160a0015160981c63ffffffff16888114611b8e57611b8e60187f4e6f742077697468206c61737420696e7469616c697a656400000000000000006040516114c5565b818160010114611bbe57611bbe60157409cdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b6040516114c5565b50611bd287600101600401846040516115c8565b611be5826001890160040160405161153e565b60405160a0015190925063ffffffff60981b1916609882901b1760a060405101528060405152600260206040510152611c2563ffffffff601085901c1690565b60408051205580604051526000602060405101528160408051205581602060405101527f5369676e696e67506f6c69637952656c617965642875696e74323536290000006060604051015280601d606060405101206000604051a25050505b60028201361015611cb057611cb0601271139bc81cda59db985d1d5c994818dbdd5b9d60721b896114c5565b600282604089013761ffff604088015160f01c16600283019250604381028301361015611cfb57611cfb6015744e6f7420656e6f756768207369676e61747572657360581b8a6114c5565b7f3030303019457468657265756d205369676e6564204d6573736167653a0a33328852603c60048901208852604887901c61ffff16975060008060006040515b84841015611fc7576000602082015260438481028801603f830137608081015160f01c8c600182011115611d8a57611d8a601271496e646578206f7574206f662072616e676560701b846114c5565b82811015611db357611db360127124b73232bc1037baba1037b31037b93232b960711b846114c5565b6001810192506020604083016080846001600019fa611dea57611dea600f6e32b1b932b1b7bb32b91032b93937b960891b846114c5565b600060608301526016602f82820201606a84013750606081015160026008021c604082015114611e3257611e32600f6e57726f6e67207369676e617475726560881b836114c5565b61ffff6060820151168301925085831115611fbc5787611e555760a08101516007555b8715610316576020600a8a0160c083013760018803611e845760c0810151815260e88a901b6020820152602381f35b611e8e89826115aa565b888252600160208301908152604080842090915281835260c08301519083205560a082015160ff1689036103165760a082015163ffffffff60701b1916607082901b1760a083015260068a6004018337815160d01c808352611f039060ff1660a084015160ff60901b191660909190911b1790565b60a08301819052600755815160ff1615611f3e5761010081046060830190815260066080840152604090208054600160ff80851690031b1790555b60a082015160901c60ff1660a083019081527f50726f746f636f6c4d65737361676552656c617965642875696e74382c75696e6060840152707433322c626f6f6c2c627974657333322960781b608084015281908a907f4b781cfef3123d9257ab69e6e8ea36ad75a346d63c5ecf8a46931a0eef48bb9e90604090a3005b600184019350611d3b565b505060405162461bcd60e51b8152602060048201526011602482015270139bdd08195b9bdd59da081dd95a59da1d607a1b604482015260640199506104e298505050505050505050565b60075460ff808216600090815260016020818152604080842063ffffffff600160701b880416808652908352818520548251808501919091528251808203850181529083019092528151919092012094600160901b8104851694600160281b909104169161207f91906128cc565b63ffffffff1661208f91906128fc565b6007546120a79190610100900463ffffffff166128e9565b9050909192565b6000826120bc86868561221d565b1495945050505050565b6000806000306001600160a01b031686866040516120e5929190612a47565b6000604051808303816000865af19150503d8060008114612122576040519150601f19603f3d011682016040523d82523d6000602084013e612127565b606091505b50915091508161216f5760405162461bcd60e51b815260206004820152601360248201527215995c9a599a58d85d1a5bdb8819985a5b1959606a1b60448201526064016104e2565b80516023146121c05760405162461bcd60e51b815260206004820152601760248201527f57726f6e6720766572696669636174696f6e206461746100000000000000000060448201526064016104e2565b6020810151604082015160e81c8582146122125760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6dedcccd2ce40d0c2e6d606b1b60448201526064016104e2565b979650505050505050565b600081815b848110156122605761224c8287878481811061224057612240612789565b90506020020135612269565b915080612258816127e1565b915050612222565b50949350505050565b60008183106122855760008281526020849052604090206115c1565b60008381526020839052604090206115c1565b6000602082840312156122aa57600080fd5b5035919050565b600080604083850312156122c457600080fd5b50508035926020909101359150565b6000806000806000608086880312156122eb57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff8082111561231857600080fd5b818801915088601f83011261232c57600080fd5b81358181111561233b57600080fd5b8960208260051b850101111561235057600080fd5b9699959850939650602001949392505050565b60008083601f84011261237557600080fd5b50813567ffffffffffffffff81111561238d57600080fd5b6020830191508360208285010111156123a557600080fd5b9250929050565b6000806000604084860312156123c157600080fd5b833567ffffffffffffffff808211156123d957600080fd5b6123e587838801612363565b909550935060208601359150808211156123fe57600080fd5b5084016060818703121561241157600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156124555761245561241c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124845761248461241c565b604052919050565b803562ffffff8116811461131057600080fd5b803563ffffffff8116811461131057600080fd5b803561ffff8116811461131057600080fd5b600067ffffffffffffffff8211156124df576124df61241c565b5060051b60200190565b600082601f8301126124fa57600080fd5b8135602061250f61250a836124c5565b61245b565b82815260059290921b8401810191818101908684111561252e57600080fd5b8286015b8481101561255f5780356001600160a01b03811681146125525760008081fd5b8352918301918301612532565b509695505050505050565b600082601f83011261257b57600080fd5b8135602061258b61250a836124c5565b82815260059290921b840181019181810190868411156125aa57600080fd5b8286015b8481101561255f576125bf816124b3565b83529183019183016125ae565b6000602082840312156125de57600080fd5b813567ffffffffffffffff808211156125f657600080fd5b9083019060c0828603121561260a57600080fd5b612612612432565b61261b8361248c565b81526126296020840161249f565b602082015261263a604084016124b3565b60408201526060830135606082015260808301358281111561265b57600080fd5b612667878286016124e9565b60808301525060a08301358281111561267f57600080fd5b61268b8782860161256a565b60a08301525095945050505050565b6000806000604084860312156126af57600080fd5b833567ffffffffffffffff8111156126c657600080fd5b6126d286828701612363565b909790965060209590950135949350505050565b6000815180845260005b8181101561270c576020818501810151868301820152016126f0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115c160208301846126e6565b6000808335601e1984360301811261275657600080fd5b83018035915067ffffffffffffffff82111561277157600080fd5b6020019150600681901b36038213156123a557600080fd5b634e487b7160e01b600052603260045260246000fd5b803560ff8116811461131057600080fd5b6000602082840312156127c257600080fd5b6115c18261279f565b634e487b7160e01b600052601160045260246000fd5b6000600182016127f3576127f36127cb565b5060010190565b60006020808352608083018435828501526040828601358186015280860135601e1987360301811261282b57600080fd5b8601838101903567ffffffffffffffff81111561284757600080fd5b8060061b360382131561285957600080fd5b606087810152928390529160009060a087015b8183101561289c5760ff61287f8661279f565b16815284860135868201529383019360019290920191830161286c565b98975050505050505050565b63ffffffff8281168282160390808211156128c5576128c56127cb565b5092915050565b63ffffffff8181168382160190808211156128c5576128c56127cb565b8082018082111561051b5761051b6127cb565b808202811582820484141761051b5761051b6127cb565b8181038181111561051b5761051b6127cb565b600081518084526020808501945080840160005b8381101561295a57815161ffff168752958201959082019060010161293a565b509495945050505050565b600060e0820163ffffffff8a168352602061ffff8a168185015288604085015260e0606085015281885180845261010086019150828a01935060005b818110156129c65784516001600160a01b0316835293830193918301916001016129a1565b505084810360808601526129da8189612926565b9250505082810360a08401526129f081866126e6565b91505061289c60c083018467ffffffffffffffff169052565b634e487b7160e01b600052601260045260246000fd5b600082612a2e57612a2e612a09565b500690565b600082612a4257612a42612a09565b500490565b818382376000910190815291905056fea2646970667358221220c2fda8422b1f071f47270132c37533afadaac1f5b2d30eb2aac2647ff1724f6964736f6c63430008140033", + "deployedBytecode": "0x6080604052600436106100fe5760003560e01c80638353412511610095578063a87f143811610064578063a87f1438146103ce578063a9dbe8ed14610409578063ab97db3714610429578063b59589d114610449578063dbdff2c11461046b57600080fd5b806383534125146103185780638af0c3071461033857806391e7d42f146103815780639932185e146103ae57600080fd5b806339436b00116100d157806339436b00146102965780637297c0a2146102b6578063808506aa146102e35780638275ae58146102f657600080fd5b80630c85bf07146101035780631e8fb36a14610136578063317ad33c1461022e578063377c50d41461025e575b600080fd5b34801561010f57600080fd5b5061012361011e366004612298565b610480565b6040519081526020015b60405180910390f35b34801561014257600080fd5b506007546101c19060ff8082169163ffffffff6101008204811692600160281b83048116926601000000000000810483169261ffff600160501b8304811693600160601b840490911692600160701b8104831692600160901b8204831692600160981b8304821692600160b81b810490911691600160c01b909104168b565b6040805160ff9c8d16815263ffffffff9b8c1660208201529b909916988b019890985295881660608a015261ffff94851660808a01529390921660a0880152851660c0870152151560e086015283166101008501521515610120840152166101408201526101600161012d565b34801561023a57600080fd5b5061024e6102493660046122b1565b6104fe565b604051901515815260200161012d565b34801561026a57600080fd5b5060055461027e906001600160a01b031681565b6040516001600160a01b03909116815260200161012d565b3480156102a257600080fd5b506101236102b13660046122b1565b610521565b3480156102c257600080fd5b506101236102d1366004612298565b60026020526000908152604090205481565b61024e6102f13660046122d3565b61059a565b34801561030257600080fd5b506103166103113660046123ac565b610742565b005b34801561032457600080fd5b506101236103333660046125cc565b6109ea565b34801561034457600080fd5b50600754600160981b900463ffffffff166000818152600260205260409020546040805163ffffffff93841681529290911660208301520161012d565b34801561038d57600080fd5b5061012361039c366004612298565b60046020526000908152604090205481565b3480156103ba57600080fd5b506101236103c936600461269a565b611315565b3480156103da57600080fd5b506103ee6103e9366004612298565b61132a565b6040805193845291151560208401529082015260600161012d565b34801561041557600080fd5b5060035461027e906001600160a01b031681565b34801561043557600080fd5b50610123610444366004612298565b61143e565b34801561045557600080fd5b5061045e6114be565b60405161012d919061272c565b34801561047757600080fd5b506103ee612011565b6003546000906001600160a01b03166104eb5760405162461bcd60e51b815260206004820152602260248201527f6e6f2061636365737320746f207369676e696e6720706f6c6963792068617368604482015261657360f01b60648201526084015b60405180910390fd5b5060009081526020819052604090205490565b600082815260016020908152604080832084845290915290205415155b92915050565b6003546000906001600160a01b031661057c5760405162461bcd60e51b815260206004820152601960248201527f6e6f2061636365737320746f206d65726b6c6520726f6f74730000000000000060448201526064016104e2565b50600091825260016020908152604080842092845291905290205490565b6000600186116105e25760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081c1c9bdd1bd8dbdb081a59606a1b60448201526064016104e2565b60008681526004602052604090205434101561062e5760405162461bcd60e51b815260206004820152600b60248201526a746f6f206c6f772066656560a81b60448201526064016104e2565b60008681526001602090815260408083208884529091529020546106569084908490876120ae565b6106995760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b60448201526064016104e2565b3415610736576005546040516000916001600160a01b03169034908381818185875af1925050503d80600081146106ec576040519150601f19603f3d011682016040523d82523d6000602084013e6106f1565b606091505b50509050806107345760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016104e2565b505b50600195945050505050565b6003546001600160a01b03161561078f5760405162461bcd60e51b81526020600482015260116024820152701999594818d85b9b9bdd081899481cd95d607a1b60448201526064016104e2565b468160200135146107d35760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c818da185a5b881a5960921b60448201526064016104e2565b80357fba90a7502e1d792c42ae7da5cf5982d831ebf2254fd5919818faf046187d95d21461083c5760405162461bcd60e51b81526020600482015260166024820152750eee4dedcce40c8cae6c6e4d2e0e8d2dedc40d0c2e6d60531b60448201526064016104e2565b60005b61084c604083018361273f565b905081101561092a576000610864604084018461273f565b8381811061087457610874612789565b61088a92602060409092020190810191506127b0565b905060018160ff16116108d55760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081c1c9bdd1bd8dbdb081a59606a1b60448201526064016104e2565b6108e2604084018461273f565b838181106108f2576108f2612789565b90506040020160200135600460008360ff16815260200190815260200160002081905550508080610922906127e1565b91505061083f565b50600061095e84848460405160200161094391906127fa565b604051602081830303815290604052805190602001206120c6565b600754909150600160981b900463ffffffff1681148061099f5750600754819061099790600190600160981b900463ffffffff166128a8565b63ffffffff16145b6109e45760405162461bcd60e51b8152602060048201526016602482015275746f6f206f6c64207369676e696e6720706f6c69637960501b60448201526064016104e2565b50505050565b6003546000906001600160a01b03163314610a475760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79207369676e20706f6c6963792073657474657200000000000000000060448201526064016104e2565b815160075462ffffff90911690610a6c90600160981b900463ffffffff1660016128cc565b63ffffffff1614610ab75760405162461bcd60e51b81526020600482015260156024820152740dcdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b60448201526064016104e2565b600082608001515111610b025760405162461bcd60e51b81526020600482015260136024820152721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b60448201526064016104e2565b61012c8260800151511115610b4b5760405162461bcd60e51b815260206004820152600f60248201526e746f6f206d616e7920766f7465727360881b60448201526064016104e2565b8160a001515182608001515114610b945760405162461bcd60e51b815260206004820152600d60248201526c0e6d2f4ca40dad2e6dac2e8c6d609b1b60448201526064016104e2565b6000805b8360a0015151811015610be6578360a001518181518110610bbb57610bbb612789565b602002602001015161ffff1682610bd291906128e9565b915080610bde816127e1565b915050610b98565b50620100008110610c305760405162461bcd60e51b8152602060048201526014602482015273746f74616c2077656967687420746f6f2062696760601b60448201526064016104e2565b610c3c611388826128fc565b612710846040015161ffff16610c5291906128fc565b1015610c965760405162461bcd60e51b81526020600482015260136024820152721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b60448201526064016104e2565b610ca26119c8826128fc565b612710846040015161ffff16610cb891906128fc565b1115610cfa5760405162461bcd60e51b81526020600482015260116024820152701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b60448201526064016104e2565b60006016846080015151610d0e91906128fc565b610d1990602b6128e9565b67ffffffffffffffff811115610d3157610d3161241c565b6040519080825280601f01601f191660200182016040528015610d5b576020820181803683370190505b509050610db06040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000801916815260200160008152602001600081525090565b600085608001515160f01b866000015160e81b876020015160e01b886040015160f01b896060015160001b8a60800151600081518110610df257610df2612789565b602002602001015160601b60088c60a00151600081518110610e1657610e16612789565b6020908102919091018101516040516001600160f01b0319998a16928101929092526001600160e81b031990971660228201526001600160e01b03199095166025860152959092166029840152602b8301526bffffffffffffffffffffffff1916604b8201526001600160f81b031961ffff90921690921c60f81b16605f82015260600160405160208183030381529060405290505b60408261010001511015610f23578082610100015181518110610ed157610ed1612789565b602001015160f81c60f81b8383610100015181518110610ef357610ef3612789565b60200101906001600160f81b031916908160001a9053506101008201805190610f1b826127e1565b905250610eac565b805160208083019190912060008085526001928501839052604085019290925260608401919091525b6080870151518351101561125d5760006080840181905260c0840181905260a08401525b60208360800151108015610f8957506080870151518351105b1561119857604083015183511015611088576020830151610fab906002612913565b60a080850191909152602084015160e08501528701518351815160009260f09290918110610fdb57610fdb612789565b602002602001015161ffff16901b60001b905060208460a00151856080015161100491906128e9565b111561103a57608084015161101a906020612913565b60a085018190526020850180516110329083906128e9565b905250611051565b6000602085015283518461104d826127e1565b9052505b60808401516110619060086128fc565b60e08501516110719060086128fc565b60c0860180519390911b90911c909117905261117a565b6060830151611098906014612913565b60a084015260608084015160e085015260808801516040850151815160009392919081106110c8576110c8612789565b60200260200101516001600160a01b0316901b60001b905060208460a0015185608001516110f691906128e9565b111561112c57608084015161110c906020612913565b60a085018190526060850180516111249083906128e9565b905250611147565b6000606085015260408401805190611143826127e1565b9052505b60808401516111579060086128fc565b60e08501516111679060086128fc565b60c0860180519390911b90911c90911790525b8260a001518360800181815161119091906128e9565b905250610f70565b6080830151156112585760c08301516040516111c1918391602001918252602082015260400190565b60405160208183030381529060405280519060200120905060005b8360800151811015611256578360c0015181602081106111fe576111fe612789565b1a60f81b858561010001518151811061121957611219612789565b60200101906001600160f81b031916908160001a9053506101008401805190611241826127e1565b9052508061124e816127e1565b9150506111dc565b505b610f4c565b865162ffffff9081166000908152602081815260408083208590558a516007805463ffffffff60981b1916918616600160981b8102929092179055828c01805191855260029093529281902063ffffffff90931690925589519051828b015160608c015160808d015160a08e0151955194909616957f91d0280e969157fc6c5b8f952f237b03d934b18534dafcac839075bbc33522f895611301958c904290612965565b60405180910390a29450505050505b919050565b60006113228484846120c6565b949350505050565b60075460ff166000908152600160209081526040808320848452909152812054819081908061138e5760405162461bcd60e51b815260206004820152601060248201526f3737903930b73237b690373ab6b132b960811b60448201526064016104e2565b60408051602081018390520160408051601f19818403018152919052805160209091012093506001806113c361010088612a1f565b6113ce9060ff612913565b600660006113de6101008b612a33565b8152602081019190915260400160002054600754911c91909116919091149350600160281b900460ff166114138660016128e9565b61141d91906128fc565b6007546114359190610100900463ffffffff166128e9565b93959294505050565b600754600090610100900463ffffffff168210156114915760405162461bcd60e51b815260206004820152601060248201526f1899599bdc99481d1a19481cdd185c9d60821b60448201526064016104e2565b600754600160281b810460ff16906114b490610100900463ffffffff1684612913565b61051b9190612a33565b60606116a1565b62461bcd60e51b815260206004820152826024820152816044820152606481fd5b6000603082901c63ffffffff16808410156115295761152960177f496e76616c696420766f74696e6720726f756e642069640000000000000000006040516114c5565b605083901c61ffff1693039290920492915050565b602082823760006020808504028301602084015b81811015611570576020816020860137604084208452602001611552565b506020850661157e57825191505b601f8516156115a25760006020840152602085068160208501376040832080845291505b509392505050565b6006826004018237805160009060d81c63ffffffff165b9392505050565b600080603f8501604885901c61ffff165b8083101561160357600085526002601684028301601e8701378451840193506001830192506115d9565b50505061ffff81111561163357611633601473746f74616c2077656967687420746f6f2062696760601b846114c5565b61ffff831661138882026127108202101561166a5761166a6013721d1bdbc81cdb585b1b081d1a1c995cda1bdb19606a1b856114c5565b6119c882026127108202111561169a5761169a6011701d1bdbc8189a59c81d1a1c995cda1bdb19607a1b856114c5565b5050505050565b60405160075460a0820152600f3610156116e1576116e1601c7f496e76616c6964207369676e20706f6c696379206d6574616461746100000000836114c5565b600b60048237805160a81c6116fc62ffffff603083901c1690565b6016604883901c61ffff1602602b016001810160040136101561174557611745601a7f496e76616c6964207369676e20706f6c696379206c656e677468000000000000866114c5565b6117518160048661153e565b604085810182905283865260006020870152852054606086018190521461179e5761179e601c7f5369676e696e6720706f6c6963792068617368206d69736d6174636800000000866114c5565b6001816004018537835160f81c600061ffff85168215611a0657604051602a85019250368311156117e9576117e9601170546f6f2073686f7274206d65737361676560781b836114c5565b6026856004018237805160d81c63ffffffff166060820185815260016080840190815260408083209091528282529020541561183d5761183d600f6e105b1c9958591e481c995b185e5959608a1b846114c5565b6001850361189f57801561186e5761186e60147315dc9bdb99c81b595cdcd859d948199bdc9b585d60621b846114c5565b815160d01c60ff161561189f5761189f6015742bb937b7339036b2b9b9b0b3b2903337b936b0ba1960591b846114c5565b86600186146118b9576118b68260a08501516114e6565b90505b878110156118ed576118ed601e7f57726f6e67207369676e20706f6c696379207265776172642065706f63680000856114c5565b60a083015160981c63ffffffff1660a084015160c01c63ffffffff168201101561192f5761192f600f6e13595cdcd859d9481d1bdbc81bdb19608a1b856114c5565b601089901c63ffffffff168083106001881415161561196a5761196a60137244656c61796564207369676e20706f6c69637960681b866114c5565b50878111156119f95760a083015160981c63ffffffff16888111156119da57600189016060850152600260808501526040606085012054806001850111156119d8576119d860187f4d75737420757365206e6577207369676e20706f6c6963790000000000000000876114c5565b505b8881036119f75760a08401516127109060601c61ffff1686020494505b505b5050602681206020820152505b82611c845760405160a0015160009060b81c60ff161115611a4f57611a4f601a7f5369676e20706f6c6963792072656c61792064697361626c65640000000000006040516114c5565b60108401361015611a8857611a8860177f4e6f206e6577207369676e20706f6c6963792073697a650000000000000000006040516114c5565b600b84600101600401604051376040515160a881901c9060f01c80611acb57611acb6013721b5d5cdd081899481b9bdb8b5d1c9a5d9a585b606a1b6040516114c5565b61012c811115611af557611af5600f6e746f6f206d616e7920766f7465727360881b6040516114c5565b60168102602b019050806001018601600401935083361015611b3f57611b3f601e7f57726f6e672073697a6520666f72206e6577207369676e20706f6c69637900006040516114c5565b603082901c62ffffff1660405160a0015160981c63ffffffff16888114611b8e57611b8e60187f4e6f742077697468206c61737420696e7469616c697a656400000000000000006040516114c5565b818160010114611bbe57611bbe60157409cdee840dccaf0e840e4caeec2e4c840cae0dec6d605b1b6040516114c5565b50611bd287600101600401846040516115c8565b611be5826001890160040160405161153e565b60405160a0015190925063ffffffff60981b1916609882901b1760a060405101528060405152600260206040510152611c2563ffffffff601085901c1690565b60408051205580604051526000602060405101528160408051205581602060405101527f5369676e696e67506f6c69637952656c617965642875696e74323536290000006060604051015280601d606060405101206000604051a25050505b60028201361015611cb057611cb0601271139bc81cda59db985d1d5c994818dbdd5b9d60721b896114c5565b600282604089013761ffff604088015160f01c16600283019250604381028301361015611cfb57611cfb6015744e6f7420656e6f756768207369676e61747572657360581b8a6114c5565b7f3030303019457468657265756d205369676e6564204d6573736167653a0a33328852603c60048901208852604887901c61ffff16975060008060006040515b84841015611fc7576000602082015260438481028801603f830137608081015160f01c8c600182011115611d8a57611d8a601271496e646578206f7574206f662072616e676560701b846114c5565b82811015611db357611db360127124b73232bc1037baba1037b31037b93232b960711b846114c5565b6001810192506020604083016080846001600019fa611dea57611dea600f6e32b1b932b1b7bb32b91032b93937b960891b846114c5565b600060608301526016602f82820201606a84013750606081015160026008021c604082015114611e3257611e32600f6e57726f6e67207369676e617475726560881b836114c5565b61ffff6060820151168301925085831115611fbc5787611e555760a08101516007555b8715610316576020600a8a0160c083013760018803611e845760c0810151815260e88a901b6020820152602381f35b611e8e89826115aa565b888252600160208301908152604080842090915281835260c08301519083205560a082015160ff1689036103165760a082015163ffffffff60701b1916607082901b1760a083015260068a6004018337815160d01c808352611f039060ff1660a084015160ff60901b191660909190911b1790565b60a08301819052600755815160ff1615611f3e5761010081046060830190815260066080840152604090208054600160ff80851690031b1790555b60a082015160901c60ff1660a083019081527f50726f746f636f6c4d65737361676552656c617965642875696e74382c75696e6060840152707433322c626f6f6c2c627974657333322960781b608084015281908a907f4b781cfef3123d9257ab69e6e8ea36ad75a346d63c5ecf8a46931a0eef48bb9e90604090a3005b600184019350611d3b565b505060405162461bcd60e51b8152602060048201526011602482015270139bdd08195b9bdd59da081dd95a59da1d607a1b604482015260640199506104e298505050505050505050565b60075460ff808216600090815260016020818152604080842063ffffffff600160701b880416808652908352818520548251808501919091528251808203850181529083019092528151919092012094600160901b8104851694600160281b909104169161207f91906128cc565b63ffffffff1661208f91906128fc565b6007546120a79190610100900463ffffffff166128e9565b9050909192565b6000826120bc86868561221d565b1495945050505050565b6000806000306001600160a01b031686866040516120e5929190612a47565b6000604051808303816000865af19150503d8060008114612122576040519150601f19603f3d011682016040523d82523d6000602084013e612127565b606091505b50915091508161216f5760405162461bcd60e51b815260206004820152601360248201527215995c9a599a58d85d1a5bdb8819985a5b1959606a1b60448201526064016104e2565b80516023146121c05760405162461bcd60e51b815260206004820152601760248201527f57726f6e6720766572696669636174696f6e206461746100000000000000000060448201526064016104e2565b6020810151604082015160e81c8582146122125760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6dedcccd2ce40d0c2e6d606b1b60448201526064016104e2565b979650505050505050565b600081815b848110156122605761224c8287878481811061224057612240612789565b90506020020135612269565b915080612258816127e1565b915050612222565b50949350505050565b60008183106122855760008281526020849052604090206115c1565b60008381526020839052604090206115c1565b6000602082840312156122aa57600080fd5b5035919050565b600080604083850312156122c457600080fd5b50508035926020909101359150565b6000806000806000608086880312156122eb57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff8082111561231857600080fd5b818801915088601f83011261232c57600080fd5b81358181111561233b57600080fd5b8960208260051b850101111561235057600080fd5b9699959850939650602001949392505050565b60008083601f84011261237557600080fd5b50813567ffffffffffffffff81111561238d57600080fd5b6020830191508360208285010111156123a557600080fd5b9250929050565b6000806000604084860312156123c157600080fd5b833567ffffffffffffffff808211156123d957600080fd5b6123e587838801612363565b909550935060208601359150808211156123fe57600080fd5b5084016060818703121561241157600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156124555761245561241c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124845761248461241c565b604052919050565b803562ffffff8116811461131057600080fd5b803563ffffffff8116811461131057600080fd5b803561ffff8116811461131057600080fd5b600067ffffffffffffffff8211156124df576124df61241c565b5060051b60200190565b600082601f8301126124fa57600080fd5b8135602061250f61250a836124c5565b61245b565b82815260059290921b8401810191818101908684111561252e57600080fd5b8286015b8481101561255f5780356001600160a01b03811681146125525760008081fd5b8352918301918301612532565b509695505050505050565b600082601f83011261257b57600080fd5b8135602061258b61250a836124c5565b82815260059290921b840181019181810190868411156125aa57600080fd5b8286015b8481101561255f576125bf816124b3565b83529183019183016125ae565b6000602082840312156125de57600080fd5b813567ffffffffffffffff808211156125f657600080fd5b9083019060c0828603121561260a57600080fd5b612612612432565b61261b8361248c565b81526126296020840161249f565b602082015261263a604084016124b3565b60408201526060830135606082015260808301358281111561265b57600080fd5b612667878286016124e9565b60808301525060a08301358281111561267f57600080fd5b61268b8782860161256a565b60a08301525095945050505050565b6000806000604084860312156126af57600080fd5b833567ffffffffffffffff8111156126c657600080fd5b6126d286828701612363565b909790965060209590950135949350505050565b6000815180845260005b8181101561270c576020818501810151868301820152016126f0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115c160208301846126e6565b6000808335601e1984360301811261275657600080fd5b83018035915067ffffffffffffffff82111561277157600080fd5b6020019150600681901b36038213156123a557600080fd5b634e487b7160e01b600052603260045260246000fd5b803560ff8116811461131057600080fd5b6000602082840312156127c257600080fd5b6115c18261279f565b634e487b7160e01b600052601160045260246000fd5b6000600182016127f3576127f36127cb565b5060010190565b60006020808352608083018435828501526040828601358186015280860135601e1987360301811261282b57600080fd5b8601838101903567ffffffffffffffff81111561284757600080fd5b8060061b360382131561285957600080fd5b606087810152928390529160009060a087015b8183101561289c5760ff61287f8661279f565b16815284860135868201529383019360019290920191830161286c565b98975050505050505050565b63ffffffff8281168282160390808211156128c5576128c56127cb565b5092915050565b63ffffffff8181168382160190808211156128c5576128c56127cb565b8082018082111561051b5761051b6127cb565b808202811582820484141761051b5761051b6127cb565b8181038181111561051b5761051b6127cb565b600081518084526020808501945080840160005b8381101561295a57815161ffff168752958201959082019060010161293a565b509495945050505050565b600060e0820163ffffffff8a168352602061ffff8a168185015288604085015260e0606085015281885180845261010086019150828a01935060005b818110156129c65784516001600160a01b0316835293830193918301916001016129a1565b505084810360808601526129da8189612926565b9250505082810360a08401526129f081866126e6565b91505061289c60c083018467ffffffffffffffff169052565b634e487b7160e01b600052601260045260246000fd5b600082612a2e57612a2e612a09565b500690565b600082612a4257612a42612a09565b500490565b818382376000910190815291905056fea2646970667358221220c2fda8422b1f071f47270132c37533afadaac1f5b2d30eb2aac2647ff1724f6964736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abi/RewardManager.json b/abi/RewardManager.json index 819bf344..aa4688d1 100644 --- a/abi/RewardManager.json +++ b/abi/RewardManager.json @@ -135,7 +135,7 @@ }, { "indexed": false, - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" }, @@ -270,17 +270,17 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" } ], - "internalType": "struct IRewardManager.RewardClaim", + "internalType": "struct RewardsV2Interface.RewardClaim", "name": "body", "type": "tuple" } ], - "internalType": "struct IRewardManager.RewardClaimWithProof[]", + "internalType": "struct RewardsV2Interface.RewardClaimWithProof[]", "name": "_proofs", "type": "tuple[]" } @@ -376,17 +376,17 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" } ], - "internalType": "struct IRewardManager.RewardClaim", + "internalType": "struct RewardsV2Interface.RewardClaim", "name": "body", "type": "tuple" } ], - "internalType": "struct IRewardManager.RewardClaimWithProof[]", + "internalType": "struct RewardsV2Interface.RewardClaimWithProof[]", "name": "_proofs", "type": "tuple[]" } @@ -402,6 +402,84 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_msgSender", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewardOwner", + "type": "address" + }, + { + "internalType": "address payable", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint24", + "name": "_rewardEpochId", + "type": "uint24" + }, + { + "internalType": "bool", + "name": "_wrap", + "type": "bool" + }, + { + "components": [ + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + }, + { + "components": [ + { + "internalType": "uint24", + "name": "rewardEpochId", + "type": "uint24" + }, + { + "internalType": "bytes20", + "name": "beneficiary", + "type": "bytes20" + }, + { + "internalType": "uint120", + "name": "amount", + "type": "uint120" + }, + { + "internalType": "enum RewardsV2Interface.ClaimType", + "name": "claimType", + "type": "uint8" + } + ], + "internalType": "struct RewardsV2Interface.RewardClaim", + "name": "body", + "type": "tuple" + } + ], + "internalType": "struct RewardsV2Interface.RewardClaimWithProof[]", + "name": "_proofs", + "type": "tuple[]" + } + ], + "name": "claimProxy", + "outputs": [ + { + "internalType": "uint256", + "name": "_rewardAmountWei", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "claimSetupManager", @@ -521,6 +599,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "ftsoRewardManagerProxy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getAddressUpdater", @@ -703,7 +794,7 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" }, @@ -713,7 +804,7 @@ "type": "bool" } ], - "internalType": "struct IRewardManager.RewardState[][]", + "internalType": "struct RewardsV2Interface.RewardState[][]", "name": "_rewardStates", "type": "tuple[][]" } @@ -754,7 +845,7 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" }, @@ -764,7 +855,7 @@ "type": "bool" } ], - "internalType": "struct IRewardManager.RewardState[]", + "internalType": "struct RewardsV2Interface.RewardState[]", "name": "_rewardStates", "type": "tuple[]" } @@ -836,7 +927,7 @@ "type": "uint24" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "_claimType", "type": "uint8" } @@ -940,17 +1031,17 @@ "type": "uint120" }, { - "internalType": "enum IRewardManager.ClaimType", + "internalType": "enum RewardsV2Interface.ClaimType", "name": "claimType", "type": "uint8" } ], - "internalType": "struct IRewardManager.RewardClaim", + "internalType": "struct RewardsV2Interface.RewardClaim", "name": "body", "type": "tuple" } ], - "internalType": "struct IRewardManager.RewardClaimWithProof[]", + "internalType": "struct RewardsV2Interface.RewardClaimWithProof[]", "name": "_proofs", "type": "tuple[]" } @@ -1190,8 +1281,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b50604051620061ba380380620061ba833981016040819052620000349162000233565b828585620000438282620000a1565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600355600b805462ffffff191662ffffff1790556001600160a01b0390911660a05260805250620002a7915050565b600054600160a01b900460ff1615620001015760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001595760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000f8565b6001600160a01b038116620001a45760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000f8565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200023057600080fd5b50565b600080600080600060a086880312156200024c57600080fd5b855162000259816200021a565b60208701519095506200026c816200021a565b60408701519094506200027f816200021a565b606087015190935062000292816200021a565b80925050608086015190509295509295909350565b60805160a051615ed1620002e96000396000818161046d01528181611bb80152611c260152600081816103e6015281816124b10152612eed0152615ed16000f3fe6080604052600436106102ff5760003560e01c80638e46778411610190578063d8def818116100dc578063ea28edad11610095578063f5a983831161006f578063f5a9838314610a36578063faae7fc914610a4b578063fbde354d14610a6b578063fd95b2e014610a8b57600080fd5b8063ea28edad146109d4578063ef88bf13146109e9578063f1367b7f14610a0957600080fd5b8063d8def81814610895578063debfda30146108c6578063deea13e7146108e6578063df339638146108fb578063e17f212e14610993578063e7dea8e6146109b457600080fd5b8063af04cd3b11610149578063b753801d11610123578063b753801d14610815578063c4db961914610835578063d6ac4f7214610855578063d6c1dbee1461087557600080fd5b8063af04cd3b146107cb578063b006b4e3146107e0578063b00c0b76146107f557600080fd5b80638e467784146106e55780639a3410bc146107055780639edbf007146107215780639ee5de3314610741578063a02e86e514610797578063a71de676146107aa57600080fd5b806351b42b001161024f57806367fc4029116102085780637a17a34d116101e25780637a17a34d146106495780637bf756c91461066b57806384e10a901461068c5780638e33aba5146106c557600080fd5b806367fc4029146105d257806370562697146105f257806374e6310e1461061b57600080fd5b806351b42b00146105145780635267a15d146105295780635aa6e6751461055d5780635ff270791461057257806362354e031461059257806362d9c89a146105b257600080fd5b80632ae07e9a116102bc57806336300be21161029657806336300be21461045b5780633ce7522a146104a7578063470ce087146104c75780634b6e018d146104e757600080fd5b80632ae07e9a146103d45780632dafdbbf1461041657806330c40bc91461044657600080fd5b806302fb0c5e14610304578063064be5321461033a57806306c7e2431461035b5780630f15f4c01461038857806315f253fb1461039f5780631de56098146103bf575b600080fd5b34801561031057600080fd5b5060185461032590600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561034657600080fd5b5060185461032590600160a01b900460ff1681565b34801561036757600080fd5b5061037b610376366004614f7f565b610aa0565b604051610331919061504d565b34801561039457600080fd5b5061039d610b6d565b005b3480156103ab57600080fd5b5061039d6103ba3660046150da565b610b8a565b3480156103cb57600080fd5b5061039d610e1f565b3480156103e057600080fd5b506104087f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610331565b34801561042257600080fd5b5061042b610fa1565b60408051938452602084019290925290820152606001610331565b34801561045257600080fd5b50610408610fc0565b34801561046757600080fd5b5061048f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156104b357600080fd5b5061039d6104c236600461515e565b610fcf565b3480156104d357600080fd5b5061039d6104e236600461519f565b610fea565b3480156104f357600080fd5b506104086105023660046151bc565b600e6020526000908152604090205481565b34801561052057600080fd5b5061039d6110d1565b34801561053557600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461048f565b34801561056957600080fd5b5061048f6110e8565b34801561057e57600080fd5b5061039d61058d3660046151d5565b61117f565b34801561059e57600080fd5b5060005461048f906001600160a01b031681565b3480156105be57600080fd5b5060165461048f906001600160a01b031681565b3480156105de57600080fd5b5061039d6105ed3660046151d5565b6113ff565b3480156105fe57600080fd5b506106076114e0565b60405162ffffff9091168152602001610331565b34801561062757600080fd5b5061063b6106363660046151d5565b6114ea565b60405161033192919061524f565b34801561065557600080fd5b5061065e61158f565b6040516103319190615270565b34801561067757600080fd5b5060165461032590600160a01b900460ff1681565b34801561069857600080fd5b50601154601254600f54601054604080519485526020850193909352918301526060820152608001610331565b3480156106d157600080fd5b506104086106e03660046152bf565b6115f4565b3480156106f157600080fd5b5060155461048f906001600160a01b031681565b34801561071157600080fd5b50600b546106079062ffffff1681565b34801561072d57600080fd5b5060175461048f906001600160a01b031681565b34801561074d57600080fd5b5061076161075c36600461535b565b61172a565b604080518251151581526020808401516001600160781b031690820152918101516001600160801b031690820152606001610331565b61039d6107a53660046153a2565b6117e7565b3480156107b657600080fd5b50600b546301000000900462ffffff16610408565b3480156107d757600080fd5b5061040861194d565b3480156107ec57600080fd5b5061039d611957565b34801561080157600080fd5b5061039d6108103660046154ad565b61199b565b34801561082157600080fd5b5061039d61083036600461515e565b611a76565b34801561084157600080fd5b5060135461048f906001600160a01b031681565b34801561086157600080fd5b5061040861087036600461519f565b611af0565b34801561088157600080fd5b5061039d6108903660046151bc565b611b09565b3480156108a157600080fd5b506108aa611dfe565b6040805162ffffff938416815292909116602083015201610331565b3480156108d257600080fd5b506103256108e136600461519f565b611e6f565b3480156108f257600080fd5b50610408611ef2565b34801561090757600080fd5b5061096b610916366004615565565b62ffffff16600090815260066020908152604080832054600783528184205460088452828520546009855283862054600a90955292909420546001600160781b03918216959482169492821693821692911690565b604080519586526020860194909452928401919091526060830152608082015260a001610331565b34801561099f57600080fd5b5060005461032590600160a81b900460ff1681565b3480156109c057600080fd5b5060185461048f906001600160a01b031681565b3480156109e057600080fd5b5061039d611f60565b3480156109f557600080fd5b5061039d610a04366004615582565b611ffb565b348015610a1557600080fd5b50610a29610a2436600461519f565b612161565b60405161033191906155b0565b348015610a4257600080fd5b5061039d612259565b348015610a5757600080fd5b5060145461048f906001600160a01b031681565b348015610a7757600080fd5b5060195461048f906001600160a01b031681565b348015610a9757600080fd5b5061039d61231f565b6060610aab82612363565b610ac183610ab76123b3565b62ffffff166123ea565b62ffffff168262ffffff161015610b115760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b60448201526064015b60405180910390fd5b610b1a82612416565b610b5a5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b08565b610b648383612494565b90505b92915050565b610b75612b6c565b6018805460ff60a81b1916600160a81b179055565b610b92612bc6565b610b9a612c1f565b610ba2612c87565b60005b84811015610bee57610bdc868683818110610bc257610bc261563f565b9050602002016020810190610bd7919061519f565b612cb1565b80610be68161566b565b915050610ba5565b50610bf883612363565b60135460405163712441d960e11b815260009182916001600160a01b039091169063e24883b290610c319033908b908b90600401615684565b600060405180830381865afa158015610c4e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c769190810190615744565b915091506000610c846123b3565b9050610c94600080878785612cf8565b5060009050805b88811015610dd45760008a8a83818110610cb757610cb761563f565b9050602002016020810190610ccc919061519f565b90506000868381518110610ce257610ce261563f565b602002602001015190506000610cfc83838d896000612ea9565b6001600160781b03169050816001600160a01b0316836001600160a01b031614610d4457610d2e82838d896001612ea9565b610d41906001600160781b03168261578a565b90505b86811015610d945760405162461bcd60e51b815260206004820152601860248201527f636c61696d656420616d6f756e7420746f6f20736d616c6c00000000000000006044820152606401610b08565b610d9e818661578a565b9450610daa878261579d565b90508015610dbe57610dbe82826001613143565b5050508080610dcc9061566b565b915050610c9b565b5080600f6000828254610de7919061578a565b90915550610e02905033610dfb8a866157b0565b6000613143565b50505050610e106001600355565b610e18613244565b5050505050565b600054600160b01b900460ff1680610e415750600054600160a81b900460ff16155b15610f9457610e4e61328b565b601854600160a81b900460ff16158015610e745750600b54600160301b900462ffffff16155b8015610e8c5750600b546301000000900462ffffff16155b610ecc5760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b6044820152606401610b08565b610ed46132c3565b610edf9060016157c7565b600b60066101000a81548162ffffff021916908362ffffff160217905550601460009054906101000a90046001600160a01b03166001600160a01b031663aec84ab66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7491906157ea565b600b60036101000a81548162ffffff021916908362ffffff160217905550565b610f9f600036613331565b565b601154601054600f546000918291610fb9919061578a565b9050909192565b6000610fca61347d565b905090565b610fe46000808484610fdf6123b3565b612cf8565b50505050565b600054600160b01b900460ff168061100c5750600054600160a81b900460ff16155b156110c35761101961328b565b6019546001600160a01b0316156110605760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610b08565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610b08565b601980546001600160a01b0319166001600160a01b03831617905550565b6110ce600036613331565b50565b6110d9612b6c565b6018805460ff60a81b19169055565b60008054600160a81b900460ff1661110a57506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190615807565b61118833611e6f565b6111c45760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610b08565b6001600160e01b031981166000908152600260205260408120805490910361122e5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b08565b805442101561127f5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610b08565b600081600101805461129090615824565b80601f01602080910402602001604051908101604052809291908181526020018280546112bc90615824565b80156113095780601f106112de57610100808354040283529160200191611309565b820191906000526020600020905b8154815290600101906020018083116112ec57829003601f168201915b505050506001600160e01b031985166000908152600260205260408120818155929350905061133b6001830182614f0f565b50506000805460ff60b01b1916600160b01b1781556040513090611360908490615858565b6000604051808303816000865af19150503d806000811461139d576040519150601f19603f3d011682016040523d82523d6000602084013e6113a2565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610fe48161349a565b611407612b6c565b6001600160e01b03198116600090815260026020526040812054900361146f5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b08565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906114db6001830182614f0f565b505050565b6000610fca6132c3565b6002602052600090815260409020805460018201805491929161150c90615824565b80601f016020809104026020016040519081016040528092919081815260200182805461153890615824565b80156115855780601f1061155a57610100808354040283529160200191611585565b820191906000526020600020905b81548152906001019060200180831161156857829003601f168201915b5050505050905082565b6060601a6000018054806020026020016040519081016040528092919081815260200182805480156115ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115cc575b5050505050905090565b60006115fe612bc6565b611606612c1f565b61160e612c87565b868661161a82826134b7565b61162388612cb1565b61162c87612363565b60006116366123b3565b905060006116478b8b898986612cf8565b6001600160781b03909116955090506116648b8b8b856000612ea9565b611677906001600160781b03168661578a565b94506001600160781b038116156116e157806001600160781b0316601060008282546116a3919061578a565b909155505060405161dead906001600160781b03831680156108fc02916000818181858888f193505050501580156116df573d6000803e3d6000fd5b505b841561170a5784600f60008282546116f9919061578a565b9091555061170a90508a868a613143565b505050506117186001600355565b611720613244565b9695505050505050565b604080516060810182526000808252602080830182905282840182905262ffffff86168252600c9052918220909183600481111561176a5761176a614fb8565b600481111561177b5761177b614fb8565b8152602080820192909252604090810160009081206001600160a01b038816825283528190208151606081018352905460ff81161515825261010081046001600160781b031693820193909352600160801b9092046001600160801b03169082015290505b9392505050565b6117ef61353a565b6117f7612c1f565b6117ff6132c3565b62ffffff168262ffffff1610156118585760405162461bcd60e51b815260206004820152601b60248201527f7265776172642065706f636820696420696e20746865207061737400000000006044820152606401610b08565b61186134613598565b62ffffff83166000908152600660205260408120805490919061188e9084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555034601160008282546118c4919061578a565b90915550508015611941576118d834613598565b62ffffff8316600090815260076020526040812080549091906119059084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550346012600082825461193b919061578a565b90915550505b611949613244565b5050565b6000610fca6135d0565b600054600160b01b900460ff16806119795750600054600160a81b900460ff16155b15610f945761198661328b565b6016805460ff60a01b1916600160a01b179055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614611a145760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610b08565b611a6c611a4883836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506135ef565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61194982826136ca565b600054600160b01b900460ff1680611a985750600054600160a81b900460ff16155b15611ae557611aa561328b565b611949828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250601a939250506138ec9050565b611949600036613331565b6000611afe82610ab76123b3565b62ffffff1692915050565b6014546001600160a01b0316331480611b2c57506019546001600160a01b031633145b611b685760405162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b6044820152606401610b08565b600b546301000000900462ffffff168114611bb65760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b6044820152606401610b08565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611c0b5750600b54611c0390600160301b900462ffffff1660326157c7565b62ffffff1681105b15611c8b57604051636b60edf760e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d6c1dbee90602401600060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050505b611c9e611c9982600161578a565b6138ff565b600b805462ffffff9290921663010000000265ffffff0000001990921691909117905560405181907f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa5890600090a26000818152600a60209081526040808320546009909252822054611d1c916001600160781b039081169116615874565b600083815260066020526040902054611d3e91906001600160781b0316615894565b90506001600160781b0381161561194957806001600160781b031660106000828254611d6a919061578a565b90915550506000828152600a602052604081208054839290611d969084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061dead6001600160a01b03166108fc826001600160781b03169081150290604051600060405180830381858888f193505050501580156114db573d6000803e3d6000fd5b600080611e096123b3565b9150611e1482612416565b611e605760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c652072657761726473006044820152606401610b08565b611e698261392f565b90509091565b60008054600160a01b900460ff168015610b675750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906158b4565b6017546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa158015611f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906158d1565b611f68612b6c565b600b5462ffffff90811614611fb15760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610b08565b611fb96132c3565b600b805462ffffff191662ffffff9290921691821790556040517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a0890600090a2565b600054600160a01b900460ff161561204c5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610b08565b6001600160a01b0382166120a25760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610b08565b6001600160a01b0381166120eb5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610b08565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6060600061217183610ab76123b3565b905061217c81612416565b1561225357600061218c8261392f565b905061219882826158ea565b6121a39060016157c7565b62ffffff166001600160401b038111156121bf576121bf6153d0565b6040519080825280602002602001820160405280156121f257816020015b60608152602001906001900390816121dd5790505b509250815b8162ffffff168162ffffff1611612250576122128582612494565b8461221d85846158ea565b62ffffff16815181106122325761223261563f565b6020026020010181905250808061224890615906565b9150506121f7565b50505b50919050565b612261612b6c565b600054600160a81b900460ff16156122bb5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610b08565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff16806123415750600054600160a81b900460ff16155b15610f945761234e61328b565b6018805460ff60a01b1916600160a01b179055565b61236b6132c3565b62ffffff168162ffffff16106110ce5760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b6044820152606401610b08565b600b54600090610fca90611c999062ffffff166123e56123d161347d565b600b546301000000900462ffffff16613989565b613989565b6001600160a01b038216600090815260046020526040812054610b6490611c999062ffffff1684613989565b601454604051633238037160e11b815262ffffff8316600482015260009182916001600160a01b039091169063647006e290602401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c91906158d1565b141592915050565b60145460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526060916000916001600160a01b039091169063c581e79190604401602060405180830381865afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906158d1565b9050600061253e8461399f565b9050600061258a60405180610100016040528060608152602001606081526020016060815260200160608152602001600081526020016060815260200160608152602001600081525090565b6016546001600160a01b031615612628576016546040516325f48f9960e11b81526001600160a01b0390911690634be91f32906125cd908a908790600401615928565b600060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261261291908101906159b2565b602083015280825251612625908361578a565b91505b6018546001600160a01b0316156126ca576018546040516325f48f9960e11b81526001600160a01b0390911690634be91f329061266b908a908790600401615928565b600060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126b09190810190615a6c565b606083015260408201819052516126c7908361578a565b91505b60175460405163277166bf60e11b81526001600160a01b0390911690634ee2cd7e906126fc908a908790600401615928565b602060405180830381865afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d91906158d1565b60808201819052156128c35760175460405163ed475a7960e01b81526001600160a01b039091169063ed475a799061277b908a908790600401615928565b600060405180830381865afa158015612798573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127c09190810190615ab8565b505060c083015260a08201819052516127d9908361578a565b91506000805b8260c0015151811015612829578260c0015181815181106128025761280261563f565b602002602001015182612815919061578a565b9150806128218161566b565b9150506127df565b506127108110156128c157601754604051634181ad4160e11b81526001600160a01b03909116906383035a8290612866908b908890600401615928565b602060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a791906158d1565b60e08301819052156128c1576128be60018461578a565b92505b505b62ffffff86166000908152600e6020526040902054841115826001600160401b038111156128f3576128f36153d0565b60405190808252806020026020018201604052801561294c57816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816129115790505b5095506000808360e0015111156129985761296f8860028b8660e0015186613a3e565b878261297a8161566b565b93508151811061298c5761298c61563f565b60200260200101819052505b60005b8360a0015151811015612a4557612a0a8960028660a0015184815181106129c4576129c461563f565b6020026020010151612a048860c0015186815181106129e5576129e561563f565b60200260200101516127108a60800151613b499092919063ffffffff16565b87613a3e565b8883612a158161566b565b945081518110612a2757612a2761563f565b60200260200101819052508080612a3d9061566b565b91505061299b565b5060005b835151811015612ad957612a9e89600386600001518481518110612a6f57612a6f61563f565b602002602001015160601c87602001518581518110612a9057612a9061563f565b602002602001015187613a3e565b8883612aa98161566b565b945081518110612abb57612abb61563f565b60200260200101819052508080612ad19061566b565b915050612a49565b5060005b836040015151811015612b5f57612b2489600486604001518481518110612b0657612b0661563f565b602002602001015187606001518581518110612a9057612a9061563f565b8883612b2f8161566b565b945081518110612b4157612b4161563f565b60200260200101819052508080612b579061566b565b915050612add565b5050505050505092915050565b612b746110e8565b6001600160a01b0316336001600160a01b031614610f9f5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610b08565b601854600160a81b900460ff16610f9f5760405162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e616765722064656163746976617465640000000000006044820152606401610b08565b600034612c2a6135d0565b612c34919061578a565b90504781811115612c775761dead6108fc612c4f848461579d565b6040518115909202916000818181858888f193505050501580156114db573d6000803e3d6000fd5b8181101561194957611949615b2b565b600260035403612caa57604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b6001600160a01b0381166110ce5760405162461bcd60e51b815260206004820152600e60248201526d726563697069656e74207a65726f60901b6044820152606401610b08565b60008060005b84811015612e9e578362ffffff16868683818110612d1e57612d1e61563f565b9050602002810190612d309190615b41565b612d41906040810190602001615565565b62ffffff161015612d8b5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c9908195c1bd8da08195e1c1a5c995960621b6044820152606401610b08565b6000868683818110612d9f57612d9f61563f565b9050602002810190612db19190615b41565b612dc29060a0810190608001615b57565b90506000816004811115612dd857612dd8614fb8565b1480612df557506001816004811115612df357612df3614fb8565b145b15612e5f576001600160a01b03891615612e5a57600080612e3a8b8b8b8b88818110612e2357612e2361563f565b9050602002810190612e359190615b41565b613c6f565b9092509050612e498287615874565b9550612e558186615874565b945050505b612e8b565b612e8b878784818110612e7457612e7461563f565b9050602002810190612e869190615b41565b61412a565b5080612e968161566b565b915050612cfe565b509550959350505050565b600080612ebb878562ffffff166123ea565b9050805b8562ffffff168162ffffff16116130cb5760145460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526000916001600160a01b03169063c581e79190604401602060405180830381865afa158015612f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6891906158d1565b905080600003612fbb57612f7b82612416565b612fbb5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b08565b62ffffff82166000908152600e602052604081205482111590612fdd8461399f565b90506000612fee8c8c8785876143b5565b612ff89082615874565b905087613055576016546001600160a01b03161561302a5761301d8c8c878587614623565b6130279082615874565b90505b6018546001600160a01b031615613055576130488c8c87858761471e565b6130529082615874565b90505b62ffffff8516600090815260096020526040812080548392906130829084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080876130b29190615874565b96505050505080806130c390615906565b915050612ebf565b506130d78560016157c7565b6001600160a01b03881660009081526004602052604090205462ffffff918216911610156131395761310a8560016157c7565b6001600160a01b0388166000908152600460205260409020805462ffffff191662ffffff929092169190911790555b5095945050505050565b80156131af5760175460405163b760faf960e01b81526001600160a01b0385811660048301529091169063b760faf99084906024016000604051808303818588803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b5050505050505050565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146131fc576040519150601f19603f3d011682016040523d82523d6000602084013e613201565b606091505b5050905080610fe45760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b08565b61324c6135d0565b4714610f9f5760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610b08565b600054600160b01b900460ff16156132bb573330146132ac576132ac615b2b565b6000805460ff60b01b19169055565b610f9f612b6c565b60145460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906157ea565b613339612b6c565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015613385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a991906158d1565b905060006133b7824261578a565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906134359082615bb8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161346e9493929190615c77565b60405180910390a15050505050565b600b54600090610b6790600160301b900462ffffff1660016147fc565b3d604051818101604052816000823e82156134b3578181f35b8181fd5b6001600160a01b03821633036134cb575050565b60135460405163ce2caa5760e01b81523360048201526001600160a01b03848116602483015283811660448301529091169063ce2caa579060640160006040518083038186803b15801561351e57600080fd5b505afa158015613532573d6000803e3d6000fd5b505050505050565b336000908152601b60205260408120549003610f9f5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920726577617264206f6666657273206d616e616765720000000000006044820152606401610b08565b60006001600160781b038211156135cc576040516306dfcc6560e41b81526078600482015260248101839052604401610b08565b5090565b6000601054600f546011546135e5919061579d565b610fca919061579d565b600080826040516020016136039190615cbd565b6040516020818303038152906040528051906020012090506000805b865181101561367b5786818151811061363a5761363a61563f565b602002602001015183036136695785818151811061365a5761365a61563f565b6020026020010151915061367b565b806136738161566b565b91505061361f565b506001600160a01b0381166136c15760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610b08565b95945050505050565b6136fe82826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b8152506135ef565b601360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061375a828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b8152506135ef565b601460006101000a8154816001600160a01b0302191690836001600160a01b031602179055506137b9828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b8152506135ef565b601580546001600160a01b0319166001600160a01b0392909216919091179055601654600160a01b900460ff16156138405761381f8282604051806040016040528060118152602001702821b430b4b729ba30b5b2a6b4b93937b960791b8152506135ef565b601680546001600160a01b0319166001600160a01b03929092169190911790555b601854600160a01b900460ff16156138a15761388082826040518060400160405280600b81526020016a43436861696e5374616b6560a81b8152506135ef565b601880546001600160a01b0319166001600160a01b03929092169190911790555b6138c882826040518060400160405280600481526020016315d3985d60e21b8152506135ef565b601780546001600160a01b0319166001600160a01b03929092169190911790555050565b6138f582614822565b61194982826148ad565b600062ffffff8211156135cc576040516306dfcc6560e41b81526018600482015260248101839052604401610b08565b60008061393a6132c3565b62ffffff16905061394c8360016157c7565b91505b808262ffffff16108015613967575061396782612416565b1561397e578161397681615906565b92505061394f565b6117e06001836158ea565b60008183116139985781610b64565b5090919050565b62ffffff811660009081526005602052604081205490819003613a3957601454604051636131910b60e11b815262ffffff841660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015613a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2d9190615cd0565b6001600160401b031690505b919050565b6040805160a08101825260009181018290526060808201838152608083019390935262ffffff8816825285901b6001600160601b031916602082015290856004811115613a8d57613a8d614fb8565b90816004811115613aa057613aa0614fb8565b90525062ffffff86166000908152600c6020526040812081876004811115613aca57613aca614fb8565b6004811115613adb57613adb614fb8565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002090508280613b1b5750805460ff165b158015608084015261313957613b3181856148ee565b6001600160781b031660408301525095945050505050565b6000808211613b8d5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610b08565b83600003613b9d575060006117e0565b83830283858281613bb057613bb0615cf9565b0403613bce57828181613bc557613bc5615cf9565b049150506117e0565b506000613bdb8386615d0f565b90506000613be98487615d23565b90506000613bf78587615d0f565b90506000613c058688615d23565b905085613c1282856157b0565b613c1c9190615d0f565b613c2683856157b0565b613c3083876157b0565b88613c3b86896157b0565b613c4591906157b0565b613c4f919061578a565b613c59919061578a565b613c63919061578a565b98975050505050505050565b600080602083016001600160a01b038616613c906060860160408701615d37565b60601c14613cd45760405162461bcd60e51b815260206004820152601160248201527077726f6e672062656e656669636961727960781b6044820152606401610b08565b600081604051602001613ce79190615d6b565b60408051601f1981840301815291905280516020918201209150600d90600090613d1390850185615565565b62ffffff1681526020808201929092526040908101600090812084825290925290205460ff16614120576014546000906001600160a01b031663647006e2613d5e6020860186615565565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa158015613d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc291906158d1565b9050613ddc8183613dd38980615dd1565b9092909161496a565b613e1f5760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b08565b613e44613e2f6020850185615565565b613e3f6060860160408701615e1a565b614982565b94506001613e586080850160608601615b57565b6004811115613e6957613e69614fb8565b03614007576015546000906001600160a01b0316639350f57c613e8f6020870187615565565b6040516001600160e01b031960e084901b16815262ffffff90911660048201526001600160a01b038c166024820152604401602060405180830381865afa158015613ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0291906158d1565b9050801561400557613f3b613f36613f276001600160781b03891684620f4240613b49565b886001600160781b0316614a3b565b613598565b9450613f478587615894565b955084600a6000613f5b6020880188615565565b62ffffff168152602081019190915260400160009081208054909190613f8b9084906001600160781b0316615874565b82546001600160781b039182166101009390930a92830291909202199091161790555061dead6001600160a01b038a16807f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2613fea6020890189615565565b60018a604051613ffc93929190615e35565b60405180910390a45b505b84600960006140196020870187615565565b62ffffff1681526020810191909152604001600090812080549091906140499084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506001600d60008560000160208101906140869190615565565b62ffffff16815260208082019290925260409081016000908120868252835220805460ff1916921515929092179091556001600160a01b0388811691908a169081907f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2906140f690880188615565565b6141066080890160608a01615b57565b8a60405161411693929190615e35565b60405180910390a4505b5050935093915050565b602081016000600c816141406040860185615565565b62ffffff16815260200190815260200160002060008360600160208101906141689190615b57565b600481111561417957614179614fb8565b600481111561418a5761418a614fb8565b815260200190815260200160002060008360200160208101906141ad9190615d37565b60601c81526020810191909152604001600020805490915060ff166114db576014546000906001600160a01b031663647006e26141ed6020860186615565565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa15801561422d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425191906158d1565b90506000836040516020016142669190615d6b565b60408051601f198184030181529190528051602090910120905061428f8282613dd38880615dd1565b6142d25760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b08565b825460ff191660011783556142fd6142ed6020860186615565565b613e3f6060870160408801615e1a565b83546001600160781b0391909116610100026fffffffffffffffffffffffffffffff001990911617835561435c6143376020860186615565565b6143476040870160208801615d37565b6143576080880160608901615b57565b614a4a565b83546001600160801b03918216600160801b0291161783556001600e60006143876020880188615565565b62ffffff16815260200190815260200160002060008282546143a9919061578a565b90915550505050505050565b60175460405163277166bf60e11b815260009182916001600160a01b0390911690634ee2cd7e906143ec908a908890600401615928565b602060405180830381865afa158015614409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061442d91906158d1565b905080156131395760175460405163ed475a7960e01b8152600091829182916001600160a01b03169063ed475a799061446c908d908b90600401615928565b600060405180830381865afa158015614489573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144b19190810190615ab8565b505081519193509150156145715760005b825181101561456f5760006144fd8383815181106144e2576144e261563f565b602002602001015161271088613b499092919063ffffffff16565b90508282815181106145115761451161563f565b602002602001015185614524919061578a565b945061454f84838151811061453b5761453b61563f565b60200260200101518d8d8d6002868e614c31565b6145599088615874565b96505080806145679061566b565b9150506144c2565b505b61271083101561461657601754604051634181ad4160e11b81526000916001600160a01b0316906383035a82906145ae908e908c90600401615928565b602060405180830381865afa1580156145cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ef91906158d1565b90508015614614576146078b8c8c8c6002868d614c31565b6146119087615874565b95505b505b5050505095945050505050565b6016546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f329061465a908b908990600401615928565b600060405180830381865afa158015614677573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261469f91908101906159b2565b9150915060005b8251811015614712576146f48382815181106146c4576146c461563f565b602002602001015160601c8a8a8a60038787815181106146e6576146e661563f565b60200260200101518b614c31565b6146fe9085615874565b93508061470a8161566b565b9150506146a6565b50505095945050505050565b6018546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f3290614755908b908990600401615928565b600060405180830381865afa158015614772573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261479a9190810190615a6c565b9150915060005b8251811015614712576147de8382815181106147bf576147bf61563f565b60200260200101518a8a8a60048787815181106146e6576146e661563f565b6147e89085615874565b9350806147f48161566b565b9150506147a1565b600080838311156148125750600090508061481b565b50600190508183035b9250929050565b8054156110ce5780546001808301916000918491614840919061579d565b815481106148505761485061563f565b60009182526020808320909101546001600160a01b03168352820192909252604001812055805481908061488657614886615e65565b600082815260209020810160001990810180546001600160a01b0319169055019055614822565b60005b81518110156114db576148dc838383815181106148cf576148cf61563f565b6020026020010151614df8565b806148e68161566b565b9150506148b0565b60008160000361490057506000610b67565b825461010090046001600160781b03166000819003614923576000915050610b67565b8354600160801b90046001600160801b031680840361494457509050610b67565b80841061495357614953615b2b565b6136c1613f366001600160781b0384168684613b49565b600082614978868685614e60565b1495945050505050565b62ffffff821660009081526006602090815260408083205460089092529091205482916001600160781b0390811691166149bc8382615874565b6001600160781b0316826001600160781b031610156149e2576149df8183615894565b92505b62ffffff851660009081526008602052604081208054859290614a0f9084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550505092915050565b60008183106139985781610b64565b62ffffff8316600090815260056020526040812054808203614afe57601454604051636131910b60e11b815262ffffff871660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015614ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ad79190615cd0565b62ffffff861660009081526005602052604090206001600160401b03919091169081905590505b6002836004811115614b1257614b12614fb8565b03614b9d57601754604051631257fcdb60e31b8152614b95916001600160a01b0316906392bfe6d890614b4f90606089901c908690600401615928565b602060405180830381865afa158015614b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9091906158d1565b614eac565b9150506117e0565b6003836004811115614bb157614bb1614fb8565b03614bf957601654604051631190c4dd60e21b81526001600160601b03198616600482015260248101839052614b95916001600160a01b031690634643137490604401614b4f565b601854604051631257fcdb60e31b8152614b95916001600160a01b0316906392bfe6d890614b4f90606089901c908690600401615928565b62ffffff84166000908152600c60205260408120819081866004811115614c5a57614c5a614fb8565b6004811115614c6b57614c6b614fb8565b815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002090508280614cab5750805460ff165b614ce95760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b9a5d1a585b1a5cd959608a1b6044820152606401610b08565b614cf381856148ee565b91506001600160781b03821615614d9357614d0d84614eac565b81548290601090614d2f908490600160801b90046001600160801b0316615e7b565b82546001600160801b0391821661010093840a908102920219161790915582548492508391600191614d6e9185916001600160781b0391900416615894565b92506101000a8154816001600160781b0302191690836001600160781b031602179055505b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2898987604051614de493929190615e35565b60405180910390a450979650505050505050565b6001600160a01b038116600090815260018301602052604090205415614e1c575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600081815b84811015614ea357614e8f82878784818110614e8357614e8361563f565b90506020020135614ee0565b915080614e9b8161566b565b915050614e65565b50949350505050565b60006001600160801b038211156135cc576040516306dfcc6560e41b81526080600482015260248101839052604401610b08565b6000818310614efc576000828152602084905260409020610b64565b6000838152602083905260409020610b64565b508054614f1b90615824565b6000825580601f10614f2b575050565b601f0160209004906000526020600020908101906110ce91905b808211156135cc5760008155600101614f45565b6001600160a01b03811681146110ce57600080fd5b62ffffff811681146110ce57600080fd5b60008060408385031215614f9257600080fd5b8235614f9d81614f59565b91506020830135614fad81614f6e565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110614fec57634e487b7160e01b600052602160045260246000fd5b9052565b62ffffff81511682526bffffffffffffffffffffffff1960208201511660208301526001600160781b036040820151166040830152600060608201516150396060850182614fce565b505060809081015115159082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561508a5761507c838551614ff0565b938501939250600101615069565b50909695505050505050565b60008083601f8401126150a857600080fd5b5081356001600160401b038111156150bf57600080fd5b6020830191508360208260051b850101111561481b57600080fd5b6000806000806000606086880312156150f257600080fd5b85356001600160401b038082111561510957600080fd5b61511589838a01615096565b90975095506020880135915061512a82614f6e565b9093506040870135908082111561514057600080fd5b5061514d88828901615096565b969995985093965092949392505050565b6000806020838503121561517157600080fd5b82356001600160401b0381111561518757600080fd5b61519385828601615096565b90969095509350505050565b6000602082840312156151b157600080fd5b81356117e081614f59565b6000602082840312156151ce57600080fd5b5035919050565b6000602082840312156151e757600080fd5b81356001600160e01b0319811681146117e057600080fd5b60005b8381101561521a578181015183820152602001615202565b50506000910152565b6000815180845261523b8160208601602086016151ff565b601f01601f19169290920160200192915050565b8281526040602082015260006152686040830184615223565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561508a5783516001600160a01b03168352928401929184019160010161528c565b80151581146110ce57600080fd5b60008060008060008060a087890312156152d857600080fd5b86356152e381614f59565b955060208701356152f381614f59565b9450604087013561530381614f6e565b93506060870135615313816152b1565b925060808701356001600160401b0381111561532e57600080fd5b61533a89828a01615096565b979a9699509497509295939492505050565b803560058110613a3957600080fd5b60008060006060848603121561537057600080fd5b833561537b81614f59565b9250602084013561538b81614f6e565b91506153996040850161534c565b90509250925092565b600080604083850312156153b557600080fd5b82356153c081614f6e565b91506020830135614fad816152b1565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561540e5761540e6153d0565b604052919050565b60006001600160401b0382111561542f5761542f6153d0565b5060051b60200190565b600082601f83011261544a57600080fd5b8135602061545f61545a83615416565b6153e6565b82815260059290921b8401810191818101908684111561547e57600080fd5b8286015b848110156154a257803561549581614f59565b8352918301918301615482565b509695505050505050565b600080604083850312156154c057600080fd5b82356001600160401b03808211156154d757600080fd5b818501915085601f8301126154eb57600080fd5b813560206154fb61545a83615416565b82815260059290921b8401810191818101908984111561551a57600080fd5b948201945b838610156155385785358252948201949082019061551f565b9650508601359250508082111561554e57600080fd5b5061555b85828601615439565b9150509250929050565b60006020828403121561557757600080fd5b81356117e081614f6e565b6000806040838503121561559557600080fd5b82356155a081614f59565b91506020830135614fad81614f59565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561563157888603603f19018552825180518088529088019088880190845b8181101561561b5761560d838551614ff0565b938b019392506001016155fa565b50909750505093860193918601916001016155d8565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161567d5761567d615655565b5060010190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b878110156156d35784356156bf81614f59565b8416825293820193908201906001016156ac565b5098975050505050505050565b600082601f8301126156f157600080fd5b8151602061570161545a83615416565b82815260059290921b8401810191818101908684111561572057600080fd5b8286015b848110156154a257805161573781614f59565b8352918301918301615724565b6000806040838503121561575757600080fd5b82516001600160401b0381111561576d57600080fd5b615779858286016156e0565b925050602083015190509250929050565b80820180821115610b6757610b67615655565b81810381811115610b6757610b67615655565b8082028115828204841417610b6757610b67615655565b62ffffff8181168382160190808211156157e3576157e3615655565b5092915050565b6000602082840312156157fc57600080fd5b81516117e081614f6e565b60006020828403121561581957600080fd5b81516117e081614f59565b600181811c9082168061583857607f821691505b60208210810361225357634e487b7160e01b600052602260045260246000fd5b6000825161586a8184602087016151ff565b9190910192915050565b6001600160781b038181168382160190808211156157e3576157e3615655565b6001600160781b038281168282160390808211156157e3576157e3615655565b6000602082840312156158c657600080fd5b81516117e0816152b1565b6000602082840312156158e357600080fd5b5051919050565b62ffffff8281168282160390808211156157e3576157e3615655565b600062ffffff80831681810361591e5761591e615655565b6001019392505050565b6001600160a01b03929092168252602082015260400190565b6001600160601b0319811681146110ce57600080fd5b600082601f83011261596857600080fd5b8151602061597861545a83615416565b82815260059290921b8401810191818101908684111561599757600080fd5b8286015b848110156154a2578051835291830191830161599b565b600080604083850312156159c557600080fd5b82516001600160401b03808211156159dc57600080fd5b818501915085601f8301126159f057600080fd5b81516020615a0061545a83615416565b82815260059290921b84018101918181019089841115615a1f57600080fd5b948201945b83861015615a46578551615a3781615941565b82529482019490820190615a24565b91880151919650909350505080821115615a5f57600080fd5b5061555b85828601615957565b60008060408385031215615a7f57600080fd5b82516001600160401b0380821115615a9657600080fd5b615aa2868387016156e0565b93506020850151915080821115615a5f57600080fd5b60008060008060808587031215615ace57600080fd5b84516001600160401b0380821115615ae557600080fd5b615af1888389016156e0565b95506020870151915080821115615b0757600080fd5b50615b1487828801615957565b604087015160609097015195989097509350505050565b634e487b7160e01b600052600160045260246000fd5b60008235609e1983360301811261586a57600080fd5b600060208284031215615b6957600080fd5b610b648261534c565b601f8211156114db57600081815260208120601f850160051c81016020861015615b995750805b601f850160051c820191505b8181101561353257828155600101615ba5565b81516001600160401b03811115615bd157615bd16153d0565b615be581615bdf8454615824565b84615b72565b602080601f831160018114615c1a5760008415615c025750858301515b600019600386901b1c1916600185901b178555613532565b600085815260208120601f198616915b82811015615c4957888601518255948401946001909101908401615c2a565b5085821015615c675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b602081526000610b646020830184615223565b600060208284031215615ce257600080fd5b81516001600160401b03811681146117e057600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615d1e57615d1e615cf9565b500490565b600082615d3257615d32615cf9565b500690565b600060208284031215615d4957600080fd5b81356117e081615941565b80356001600160781b0381168114613a3957600080fd5b608081018235615d7a81614f6e565b62ffffff1682526020830135615d8f81615941565b6001600160601b03191660208301526001600160781b03615db260408501615d54565b166040830152615dc46060840161534c565b6157e36060840182614fce565b6000808335601e19843603018112615de857600080fd5b8301803591506001600160401b03821115615e0257600080fd5b6020019150600581901b360382131561481b57600080fd5b600060208284031215615e2c57600080fd5b610b6482615d54565b62ffffff8416815260608101615e4e6020830185614fce565b6001600160781b0383166040830152949350505050565b634e487b7160e01b600052603160045260246000fd5b6001600160801b038281168282160390808211156157e3576157e361565556fea2646970667358221220d408d187835baa2d8071ba082d6d3a06eab988fe63cdb7684c47d61ba60629bf64736f6c63430008140033", - "deployedBytecode": "0x6080604052600436106102ff5760003560e01c80638e46778411610190578063d8def818116100dc578063ea28edad11610095578063f5a983831161006f578063f5a9838314610a36578063faae7fc914610a4b578063fbde354d14610a6b578063fd95b2e014610a8b57600080fd5b8063ea28edad146109d4578063ef88bf13146109e9578063f1367b7f14610a0957600080fd5b8063d8def81814610895578063debfda30146108c6578063deea13e7146108e6578063df339638146108fb578063e17f212e14610993578063e7dea8e6146109b457600080fd5b8063af04cd3b11610149578063b753801d11610123578063b753801d14610815578063c4db961914610835578063d6ac4f7214610855578063d6c1dbee1461087557600080fd5b8063af04cd3b146107cb578063b006b4e3146107e0578063b00c0b76146107f557600080fd5b80638e467784146106e55780639a3410bc146107055780639edbf007146107215780639ee5de3314610741578063a02e86e514610797578063a71de676146107aa57600080fd5b806351b42b001161024f57806367fc4029116102085780637a17a34d116101e25780637a17a34d146106495780637bf756c91461066b57806384e10a901461068c5780638e33aba5146106c557600080fd5b806367fc4029146105d257806370562697146105f257806374e6310e1461061b57600080fd5b806351b42b00146105145780635267a15d146105295780635aa6e6751461055d5780635ff270791461057257806362354e031461059257806362d9c89a146105b257600080fd5b80632ae07e9a116102bc57806336300be21161029657806336300be21461045b5780633ce7522a146104a7578063470ce087146104c75780634b6e018d146104e757600080fd5b80632ae07e9a146103d45780632dafdbbf1461041657806330c40bc91461044657600080fd5b806302fb0c5e14610304578063064be5321461033a57806306c7e2431461035b5780630f15f4c01461038857806315f253fb1461039f5780631de56098146103bf575b600080fd5b34801561031057600080fd5b5060185461032590600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561034657600080fd5b5060185461032590600160a01b900460ff1681565b34801561036757600080fd5b5061037b610376366004614f7f565b610aa0565b604051610331919061504d565b34801561039457600080fd5b5061039d610b6d565b005b3480156103ab57600080fd5b5061039d6103ba3660046150da565b610b8a565b3480156103cb57600080fd5b5061039d610e1f565b3480156103e057600080fd5b506104087f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610331565b34801561042257600080fd5b5061042b610fa1565b60408051938452602084019290925290820152606001610331565b34801561045257600080fd5b50610408610fc0565b34801561046757600080fd5b5061048f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156104b357600080fd5b5061039d6104c236600461515e565b610fcf565b3480156104d357600080fd5b5061039d6104e236600461519f565b610fea565b3480156104f357600080fd5b506104086105023660046151bc565b600e6020526000908152604090205481565b34801561052057600080fd5b5061039d6110d1565b34801561053557600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461048f565b34801561056957600080fd5b5061048f6110e8565b34801561057e57600080fd5b5061039d61058d3660046151d5565b61117f565b34801561059e57600080fd5b5060005461048f906001600160a01b031681565b3480156105be57600080fd5b5060165461048f906001600160a01b031681565b3480156105de57600080fd5b5061039d6105ed3660046151d5565b6113ff565b3480156105fe57600080fd5b506106076114e0565b60405162ffffff9091168152602001610331565b34801561062757600080fd5b5061063b6106363660046151d5565b6114ea565b60405161033192919061524f565b34801561065557600080fd5b5061065e61158f565b6040516103319190615270565b34801561067757600080fd5b5060165461032590600160a01b900460ff1681565b34801561069857600080fd5b50601154601254600f54601054604080519485526020850193909352918301526060820152608001610331565b3480156106d157600080fd5b506104086106e03660046152bf565b6115f4565b3480156106f157600080fd5b5060155461048f906001600160a01b031681565b34801561071157600080fd5b50600b546106079062ffffff1681565b34801561072d57600080fd5b5060175461048f906001600160a01b031681565b34801561074d57600080fd5b5061076161075c36600461535b565b61172a565b604080518251151581526020808401516001600160781b031690820152918101516001600160801b031690820152606001610331565b61039d6107a53660046153a2565b6117e7565b3480156107b657600080fd5b50600b546301000000900462ffffff16610408565b3480156107d757600080fd5b5061040861194d565b3480156107ec57600080fd5b5061039d611957565b34801561080157600080fd5b5061039d6108103660046154ad565b61199b565b34801561082157600080fd5b5061039d61083036600461515e565b611a76565b34801561084157600080fd5b5060135461048f906001600160a01b031681565b34801561086157600080fd5b5061040861087036600461519f565b611af0565b34801561088157600080fd5b5061039d6108903660046151bc565b611b09565b3480156108a157600080fd5b506108aa611dfe565b6040805162ffffff938416815292909116602083015201610331565b3480156108d257600080fd5b506103256108e136600461519f565b611e6f565b3480156108f257600080fd5b50610408611ef2565b34801561090757600080fd5b5061096b610916366004615565565b62ffffff16600090815260066020908152604080832054600783528184205460088452828520546009855283862054600a90955292909420546001600160781b03918216959482169492821693821692911690565b604080519586526020860194909452928401919091526060830152608082015260a001610331565b34801561099f57600080fd5b5060005461032590600160a81b900460ff1681565b3480156109c057600080fd5b5060185461048f906001600160a01b031681565b3480156109e057600080fd5b5061039d611f60565b3480156109f557600080fd5b5061039d610a04366004615582565b611ffb565b348015610a1557600080fd5b50610a29610a2436600461519f565b612161565b60405161033191906155b0565b348015610a4257600080fd5b5061039d612259565b348015610a5757600080fd5b5060145461048f906001600160a01b031681565b348015610a7757600080fd5b5060195461048f906001600160a01b031681565b348015610a9757600080fd5b5061039d61231f565b6060610aab82612363565b610ac183610ab76123b3565b62ffffff166123ea565b62ffffff168262ffffff161015610b115760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b60448201526064015b60405180910390fd5b610b1a82612416565b610b5a5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b08565b610b648383612494565b90505b92915050565b610b75612b6c565b6018805460ff60a81b1916600160a81b179055565b610b92612bc6565b610b9a612c1f565b610ba2612c87565b60005b84811015610bee57610bdc868683818110610bc257610bc261563f565b9050602002016020810190610bd7919061519f565b612cb1565b80610be68161566b565b915050610ba5565b50610bf883612363565b60135460405163712441d960e11b815260009182916001600160a01b039091169063e24883b290610c319033908b908b90600401615684565b600060405180830381865afa158015610c4e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c769190810190615744565b915091506000610c846123b3565b9050610c94600080878785612cf8565b5060009050805b88811015610dd45760008a8a83818110610cb757610cb761563f565b9050602002016020810190610ccc919061519f565b90506000868381518110610ce257610ce261563f565b602002602001015190506000610cfc83838d896000612ea9565b6001600160781b03169050816001600160a01b0316836001600160a01b031614610d4457610d2e82838d896001612ea9565b610d41906001600160781b03168261578a565b90505b86811015610d945760405162461bcd60e51b815260206004820152601860248201527f636c61696d656420616d6f756e7420746f6f20736d616c6c00000000000000006044820152606401610b08565b610d9e818661578a565b9450610daa878261579d565b90508015610dbe57610dbe82826001613143565b5050508080610dcc9061566b565b915050610c9b565b5080600f6000828254610de7919061578a565b90915550610e02905033610dfb8a866157b0565b6000613143565b50505050610e106001600355565b610e18613244565b5050505050565b600054600160b01b900460ff1680610e415750600054600160a81b900460ff16155b15610f9457610e4e61328b565b601854600160a81b900460ff16158015610e745750600b54600160301b900462ffffff16155b8015610e8c5750600b546301000000900462ffffff16155b610ecc5760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b6044820152606401610b08565b610ed46132c3565b610edf9060016157c7565b600b60066101000a81548162ffffff021916908362ffffff160217905550601460009054906101000a90046001600160a01b03166001600160a01b031663aec84ab66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7491906157ea565b600b60036101000a81548162ffffff021916908362ffffff160217905550565b610f9f600036613331565b565b601154601054600f546000918291610fb9919061578a565b9050909192565b6000610fca61347d565b905090565b610fe46000808484610fdf6123b3565b612cf8565b50505050565b600054600160b01b900460ff168061100c5750600054600160a81b900460ff16155b156110c35761101961328b565b6019546001600160a01b0316156110605760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610b08565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610b08565b601980546001600160a01b0319166001600160a01b03831617905550565b6110ce600036613331565b50565b6110d9612b6c565b6018805460ff60a81b19169055565b60008054600160a81b900460ff1661110a57506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190615807565b61118833611e6f565b6111c45760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610b08565b6001600160e01b031981166000908152600260205260408120805490910361122e5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b08565b805442101561127f5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610b08565b600081600101805461129090615824565b80601f01602080910402602001604051908101604052809291908181526020018280546112bc90615824565b80156113095780601f106112de57610100808354040283529160200191611309565b820191906000526020600020905b8154815290600101906020018083116112ec57829003601f168201915b505050506001600160e01b031985166000908152600260205260408120818155929350905061133b6001830182614f0f565b50506000805460ff60b01b1916600160b01b1781556040513090611360908490615858565b6000604051808303816000865af19150503d806000811461139d576040519150601f19603f3d011682016040523d82523d6000602084013e6113a2565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610fe48161349a565b611407612b6c565b6001600160e01b03198116600090815260026020526040812054900361146f5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b08565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906114db6001830182614f0f565b505050565b6000610fca6132c3565b6002602052600090815260409020805460018201805491929161150c90615824565b80601f016020809104026020016040519081016040528092919081815260200182805461153890615824565b80156115855780601f1061155a57610100808354040283529160200191611585565b820191906000526020600020905b81548152906001019060200180831161156857829003601f168201915b5050505050905082565b6060601a6000018054806020026020016040519081016040528092919081815260200182805480156115ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115cc575b5050505050905090565b60006115fe612bc6565b611606612c1f565b61160e612c87565b868661161a82826134b7565b61162388612cb1565b61162c87612363565b60006116366123b3565b905060006116478b8b898986612cf8565b6001600160781b03909116955090506116648b8b8b856000612ea9565b611677906001600160781b03168661578a565b94506001600160781b038116156116e157806001600160781b0316601060008282546116a3919061578a565b909155505060405161dead906001600160781b03831680156108fc02916000818181858888f193505050501580156116df573d6000803e3d6000fd5b505b841561170a5784600f60008282546116f9919061578a565b9091555061170a90508a868a613143565b505050506117186001600355565b611720613244565b9695505050505050565b604080516060810182526000808252602080830182905282840182905262ffffff86168252600c9052918220909183600481111561176a5761176a614fb8565b600481111561177b5761177b614fb8565b8152602080820192909252604090810160009081206001600160a01b038816825283528190208151606081018352905460ff81161515825261010081046001600160781b031693820193909352600160801b9092046001600160801b03169082015290505b9392505050565b6117ef61353a565b6117f7612c1f565b6117ff6132c3565b62ffffff168262ffffff1610156118585760405162461bcd60e51b815260206004820152601b60248201527f7265776172642065706f636820696420696e20746865207061737400000000006044820152606401610b08565b61186134613598565b62ffffff83166000908152600660205260408120805490919061188e9084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555034601160008282546118c4919061578a565b90915550508015611941576118d834613598565b62ffffff8316600090815260076020526040812080549091906119059084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550346012600082825461193b919061578a565b90915550505b611949613244565b5050565b6000610fca6135d0565b600054600160b01b900460ff16806119795750600054600160a81b900460ff16155b15610f945761198661328b565b6016805460ff60a01b1916600160a01b179055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614611a145760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610b08565b611a6c611a4883836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506135ef565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61194982826136ca565b600054600160b01b900460ff1680611a985750600054600160a81b900460ff16155b15611ae557611aa561328b565b611949828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250601a939250506138ec9050565b611949600036613331565b6000611afe82610ab76123b3565b62ffffff1692915050565b6014546001600160a01b0316331480611b2c57506019546001600160a01b031633145b611b685760405162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b6044820152606401610b08565b600b546301000000900462ffffff168114611bb65760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b6044820152606401610b08565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611c0b5750600b54611c0390600160301b900462ffffff1660326157c7565b62ffffff1681105b15611c8b57604051636b60edf760e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d6c1dbee90602401600060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050505b611c9e611c9982600161578a565b6138ff565b600b805462ffffff9290921663010000000265ffffff0000001990921691909117905560405181907f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa5890600090a26000818152600a60209081526040808320546009909252822054611d1c916001600160781b039081169116615874565b600083815260066020526040902054611d3e91906001600160781b0316615894565b90506001600160781b0381161561194957806001600160781b031660106000828254611d6a919061578a565b90915550506000828152600a602052604081208054839290611d969084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061dead6001600160a01b03166108fc826001600160781b03169081150290604051600060405180830381858888f193505050501580156114db573d6000803e3d6000fd5b600080611e096123b3565b9150611e1482612416565b611e605760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c652072657761726473006044820152606401610b08565b611e698261392f565b90509091565b60008054600160a01b900460ff168015610b675750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906158b4565b6017546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa158015611f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906158d1565b611f68612b6c565b600b5462ffffff90811614611fb15760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610b08565b611fb96132c3565b600b805462ffffff191662ffffff9290921691821790556040517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a0890600090a2565b600054600160a01b900460ff161561204c5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610b08565b6001600160a01b0382166120a25760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610b08565b6001600160a01b0381166120eb5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610b08565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6060600061217183610ab76123b3565b905061217c81612416565b1561225357600061218c8261392f565b905061219882826158ea565b6121a39060016157c7565b62ffffff166001600160401b038111156121bf576121bf6153d0565b6040519080825280602002602001820160405280156121f257816020015b60608152602001906001900390816121dd5790505b509250815b8162ffffff168162ffffff1611612250576122128582612494565b8461221d85846158ea565b62ffffff16815181106122325761223261563f565b6020026020010181905250808061224890615906565b9150506121f7565b50505b50919050565b612261612b6c565b600054600160a81b900460ff16156122bb5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610b08565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff16806123415750600054600160a81b900460ff16155b15610f945761234e61328b565b6018805460ff60a01b1916600160a01b179055565b61236b6132c3565b62ffffff168162ffffff16106110ce5760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b6044820152606401610b08565b600b54600090610fca90611c999062ffffff166123e56123d161347d565b600b546301000000900462ffffff16613989565b613989565b6001600160a01b038216600090815260046020526040812054610b6490611c999062ffffff1684613989565b601454604051633238037160e11b815262ffffff8316600482015260009182916001600160a01b039091169063647006e290602401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c91906158d1565b141592915050565b60145460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526060916000916001600160a01b039091169063c581e79190604401602060405180830381865afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906158d1565b9050600061253e8461399f565b9050600061258a60405180610100016040528060608152602001606081526020016060815260200160608152602001600081526020016060815260200160608152602001600081525090565b6016546001600160a01b031615612628576016546040516325f48f9960e11b81526001600160a01b0390911690634be91f32906125cd908a908790600401615928565b600060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261261291908101906159b2565b602083015280825251612625908361578a565b91505b6018546001600160a01b0316156126ca576018546040516325f48f9960e11b81526001600160a01b0390911690634be91f329061266b908a908790600401615928565b600060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126b09190810190615a6c565b606083015260408201819052516126c7908361578a565b91505b60175460405163277166bf60e11b81526001600160a01b0390911690634ee2cd7e906126fc908a908790600401615928565b602060405180830381865afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d91906158d1565b60808201819052156128c35760175460405163ed475a7960e01b81526001600160a01b039091169063ed475a799061277b908a908790600401615928565b600060405180830381865afa158015612798573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127c09190810190615ab8565b505060c083015260a08201819052516127d9908361578a565b91506000805b8260c0015151811015612829578260c0015181815181106128025761280261563f565b602002602001015182612815919061578a565b9150806128218161566b565b9150506127df565b506127108110156128c157601754604051634181ad4160e11b81526001600160a01b03909116906383035a8290612866908b908890600401615928565b602060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a791906158d1565b60e08301819052156128c1576128be60018461578a565b92505b505b62ffffff86166000908152600e6020526040902054841115826001600160401b038111156128f3576128f36153d0565b60405190808252806020026020018201604052801561294c57816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816129115790505b5095506000808360e0015111156129985761296f8860028b8660e0015186613a3e565b878261297a8161566b565b93508151811061298c5761298c61563f565b60200260200101819052505b60005b8360a0015151811015612a4557612a0a8960028660a0015184815181106129c4576129c461563f565b6020026020010151612a048860c0015186815181106129e5576129e561563f565b60200260200101516127108a60800151613b499092919063ffffffff16565b87613a3e565b8883612a158161566b565b945081518110612a2757612a2761563f565b60200260200101819052508080612a3d9061566b565b91505061299b565b5060005b835151811015612ad957612a9e89600386600001518481518110612a6f57612a6f61563f565b602002602001015160601c87602001518581518110612a9057612a9061563f565b602002602001015187613a3e565b8883612aa98161566b565b945081518110612abb57612abb61563f565b60200260200101819052508080612ad19061566b565b915050612a49565b5060005b836040015151811015612b5f57612b2489600486604001518481518110612b0657612b0661563f565b602002602001015187606001518581518110612a9057612a9061563f565b8883612b2f8161566b565b945081518110612b4157612b4161563f565b60200260200101819052508080612b579061566b565b915050612add565b5050505050505092915050565b612b746110e8565b6001600160a01b0316336001600160a01b031614610f9f5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610b08565b601854600160a81b900460ff16610f9f5760405162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e616765722064656163746976617465640000000000006044820152606401610b08565b600034612c2a6135d0565b612c34919061578a565b90504781811115612c775761dead6108fc612c4f848461579d565b6040518115909202916000818181858888f193505050501580156114db573d6000803e3d6000fd5b8181101561194957611949615b2b565b600260035403612caa57604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b6001600160a01b0381166110ce5760405162461bcd60e51b815260206004820152600e60248201526d726563697069656e74207a65726f60901b6044820152606401610b08565b60008060005b84811015612e9e578362ffffff16868683818110612d1e57612d1e61563f565b9050602002810190612d309190615b41565b612d41906040810190602001615565565b62ffffff161015612d8b5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c9908195c1bd8da08195e1c1a5c995960621b6044820152606401610b08565b6000868683818110612d9f57612d9f61563f565b9050602002810190612db19190615b41565b612dc29060a0810190608001615b57565b90506000816004811115612dd857612dd8614fb8565b1480612df557506001816004811115612df357612df3614fb8565b145b15612e5f576001600160a01b03891615612e5a57600080612e3a8b8b8b8b88818110612e2357612e2361563f565b9050602002810190612e359190615b41565b613c6f565b9092509050612e498287615874565b9550612e558186615874565b945050505b612e8b565b612e8b878784818110612e7457612e7461563f565b9050602002810190612e869190615b41565b61412a565b5080612e968161566b565b915050612cfe565b509550959350505050565b600080612ebb878562ffffff166123ea565b9050805b8562ffffff168162ffffff16116130cb5760145460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526000916001600160a01b03169063c581e79190604401602060405180830381865afa158015612f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6891906158d1565b905080600003612fbb57612f7b82612416565b612fbb5760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b08565b62ffffff82166000908152600e602052604081205482111590612fdd8461399f565b90506000612fee8c8c8785876143b5565b612ff89082615874565b905087613055576016546001600160a01b03161561302a5761301d8c8c878587614623565b6130279082615874565b90505b6018546001600160a01b031615613055576130488c8c87858761471e565b6130529082615874565b90505b62ffffff8516600090815260096020526040812080548392906130829084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080876130b29190615874565b96505050505080806130c390615906565b915050612ebf565b506130d78560016157c7565b6001600160a01b03881660009081526004602052604090205462ffffff918216911610156131395761310a8560016157c7565b6001600160a01b0388166000908152600460205260409020805462ffffff191662ffffff929092169190911790555b5095945050505050565b80156131af5760175460405163b760faf960e01b81526001600160a01b0385811660048301529091169063b760faf99084906024016000604051808303818588803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b5050505050505050565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146131fc576040519150601f19603f3d011682016040523d82523d6000602084013e613201565b606091505b5050905080610fe45760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b08565b61324c6135d0565b4714610f9f5760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610b08565b600054600160b01b900460ff16156132bb573330146132ac576132ac615b2b565b6000805460ff60b01b19169055565b610f9f612b6c565b60145460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906157ea565b613339612b6c565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015613385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a991906158d1565b905060006133b7824261578a565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906134359082615bb8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161346e9493929190615c77565b60405180910390a15050505050565b600b54600090610b6790600160301b900462ffffff1660016147fc565b3d604051818101604052816000823e82156134b3578181f35b8181fd5b6001600160a01b03821633036134cb575050565b60135460405163ce2caa5760e01b81523360048201526001600160a01b03848116602483015283811660448301529091169063ce2caa579060640160006040518083038186803b15801561351e57600080fd5b505afa158015613532573d6000803e3d6000fd5b505050505050565b336000908152601b60205260408120549003610f9f5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920726577617264206f6666657273206d616e616765720000000000006044820152606401610b08565b60006001600160781b038211156135cc576040516306dfcc6560e41b81526078600482015260248101839052604401610b08565b5090565b6000601054600f546011546135e5919061579d565b610fca919061579d565b600080826040516020016136039190615cbd565b6040516020818303038152906040528051906020012090506000805b865181101561367b5786818151811061363a5761363a61563f565b602002602001015183036136695785818151811061365a5761365a61563f565b6020026020010151915061367b565b806136738161566b565b91505061361f565b506001600160a01b0381166136c15760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610b08565b95945050505050565b6136fe82826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b8152506135ef565b601360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061375a828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b8152506135ef565b601460006101000a8154816001600160a01b0302191690836001600160a01b031602179055506137b9828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b8152506135ef565b601580546001600160a01b0319166001600160a01b0392909216919091179055601654600160a01b900460ff16156138405761381f8282604051806040016040528060118152602001702821b430b4b729ba30b5b2a6b4b93937b960791b8152506135ef565b601680546001600160a01b0319166001600160a01b03929092169190911790555b601854600160a01b900460ff16156138a15761388082826040518060400160405280600b81526020016a43436861696e5374616b6560a81b8152506135ef565b601880546001600160a01b0319166001600160a01b03929092169190911790555b6138c882826040518060400160405280600481526020016315d3985d60e21b8152506135ef565b601780546001600160a01b0319166001600160a01b03929092169190911790555050565b6138f582614822565b61194982826148ad565b600062ffffff8211156135cc576040516306dfcc6560e41b81526018600482015260248101839052604401610b08565b60008061393a6132c3565b62ffffff16905061394c8360016157c7565b91505b808262ffffff16108015613967575061396782612416565b1561397e578161397681615906565b92505061394f565b6117e06001836158ea565b60008183116139985781610b64565b5090919050565b62ffffff811660009081526005602052604081205490819003613a3957601454604051636131910b60e11b815262ffffff841660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015613a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2d9190615cd0565b6001600160401b031690505b919050565b6040805160a08101825260009181018290526060808201838152608083019390935262ffffff8816825285901b6001600160601b031916602082015290856004811115613a8d57613a8d614fb8565b90816004811115613aa057613aa0614fb8565b90525062ffffff86166000908152600c6020526040812081876004811115613aca57613aca614fb8565b6004811115613adb57613adb614fb8565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002090508280613b1b5750805460ff165b158015608084015261313957613b3181856148ee565b6001600160781b031660408301525095945050505050565b6000808211613b8d5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610b08565b83600003613b9d575060006117e0565b83830283858281613bb057613bb0615cf9565b0403613bce57828181613bc557613bc5615cf9565b049150506117e0565b506000613bdb8386615d0f565b90506000613be98487615d23565b90506000613bf78587615d0f565b90506000613c058688615d23565b905085613c1282856157b0565b613c1c9190615d0f565b613c2683856157b0565b613c3083876157b0565b88613c3b86896157b0565b613c4591906157b0565b613c4f919061578a565b613c59919061578a565b613c63919061578a565b98975050505050505050565b600080602083016001600160a01b038616613c906060860160408701615d37565b60601c14613cd45760405162461bcd60e51b815260206004820152601160248201527077726f6e672062656e656669636961727960781b6044820152606401610b08565b600081604051602001613ce79190615d6b565b60408051601f1981840301815291905280516020918201209150600d90600090613d1390850185615565565b62ffffff1681526020808201929092526040908101600090812084825290925290205460ff16614120576014546000906001600160a01b031663647006e2613d5e6020860186615565565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa158015613d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc291906158d1565b9050613ddc8183613dd38980615dd1565b9092909161496a565b613e1f5760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b08565b613e44613e2f6020850185615565565b613e3f6060860160408701615e1a565b614982565b94506001613e586080850160608601615b57565b6004811115613e6957613e69614fb8565b03614007576015546000906001600160a01b0316639350f57c613e8f6020870187615565565b6040516001600160e01b031960e084901b16815262ffffff90911660048201526001600160a01b038c166024820152604401602060405180830381865afa158015613ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0291906158d1565b9050801561400557613f3b613f36613f276001600160781b03891684620f4240613b49565b886001600160781b0316614a3b565b613598565b9450613f478587615894565b955084600a6000613f5b6020880188615565565b62ffffff168152602081019190915260400160009081208054909190613f8b9084906001600160781b0316615874565b82546001600160781b039182166101009390930a92830291909202199091161790555061dead6001600160a01b038a16807f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2613fea6020890189615565565b60018a604051613ffc93929190615e35565b60405180910390a45b505b84600960006140196020870187615565565b62ffffff1681526020810191909152604001600090812080549091906140499084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506001600d60008560000160208101906140869190615565565b62ffffff16815260208082019290925260409081016000908120868252835220805460ff1916921515929092179091556001600160a01b0388811691908a169081907f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2906140f690880188615565565b6141066080890160608a01615b57565b8a60405161411693929190615e35565b60405180910390a4505b5050935093915050565b602081016000600c816141406040860185615565565b62ffffff16815260200190815260200160002060008360600160208101906141689190615b57565b600481111561417957614179614fb8565b600481111561418a5761418a614fb8565b815260200190815260200160002060008360200160208101906141ad9190615d37565b60601c81526020810191909152604001600020805490915060ff166114db576014546000906001600160a01b031663647006e26141ed6020860186615565565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa15801561422d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425191906158d1565b90506000836040516020016142669190615d6b565b60408051601f198184030181529190528051602090910120905061428f8282613dd38880615dd1565b6142d25760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b08565b825460ff191660011783556142fd6142ed6020860186615565565b613e3f6060870160408801615e1a565b83546001600160781b0391909116610100026fffffffffffffffffffffffffffffff001990911617835561435c6143376020860186615565565b6143476040870160208801615d37565b6143576080880160608901615b57565b614a4a565b83546001600160801b03918216600160801b0291161783556001600e60006143876020880188615565565b62ffffff16815260200190815260200160002060008282546143a9919061578a565b90915550505050505050565b60175460405163277166bf60e11b815260009182916001600160a01b0390911690634ee2cd7e906143ec908a908890600401615928565b602060405180830381865afa158015614409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061442d91906158d1565b905080156131395760175460405163ed475a7960e01b8152600091829182916001600160a01b03169063ed475a799061446c908d908b90600401615928565b600060405180830381865afa158015614489573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144b19190810190615ab8565b505081519193509150156145715760005b825181101561456f5760006144fd8383815181106144e2576144e261563f565b602002602001015161271088613b499092919063ffffffff16565b90508282815181106145115761451161563f565b602002602001015185614524919061578a565b945061454f84838151811061453b5761453b61563f565b60200260200101518d8d8d6002868e614c31565b6145599088615874565b96505080806145679061566b565b9150506144c2565b505b61271083101561461657601754604051634181ad4160e11b81526000916001600160a01b0316906383035a82906145ae908e908c90600401615928565b602060405180830381865afa1580156145cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ef91906158d1565b90508015614614576146078b8c8c8c6002868d614c31565b6146119087615874565b95505b505b5050505095945050505050565b6016546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f329061465a908b908990600401615928565b600060405180830381865afa158015614677573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261469f91908101906159b2565b9150915060005b8251811015614712576146f48382815181106146c4576146c461563f565b602002602001015160601c8a8a8a60038787815181106146e6576146e661563f565b60200260200101518b614c31565b6146fe9085615874565b93508061470a8161566b565b9150506146a6565b50505095945050505050565b6018546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f3290614755908b908990600401615928565b600060405180830381865afa158015614772573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261479a9190810190615a6c565b9150915060005b8251811015614712576147de8382815181106147bf576147bf61563f565b60200260200101518a8a8a60048787815181106146e6576146e661563f565b6147e89085615874565b9350806147f48161566b565b9150506147a1565b600080838311156148125750600090508061481b565b50600190508183035b9250929050565b8054156110ce5780546001808301916000918491614840919061579d565b815481106148505761485061563f565b60009182526020808320909101546001600160a01b03168352820192909252604001812055805481908061488657614886615e65565b600082815260209020810160001990810180546001600160a01b0319169055019055614822565b60005b81518110156114db576148dc838383815181106148cf576148cf61563f565b6020026020010151614df8565b806148e68161566b565b9150506148b0565b60008160000361490057506000610b67565b825461010090046001600160781b03166000819003614923576000915050610b67565b8354600160801b90046001600160801b031680840361494457509050610b67565b80841061495357614953615b2b565b6136c1613f366001600160781b0384168684613b49565b600082614978868685614e60565b1495945050505050565b62ffffff821660009081526006602090815260408083205460089092529091205482916001600160781b0390811691166149bc8382615874565b6001600160781b0316826001600160781b031610156149e2576149df8183615894565b92505b62ffffff851660009081526008602052604081208054859290614a0f9084906001600160781b0316615874565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550505092915050565b60008183106139985781610b64565b62ffffff8316600090815260056020526040812054808203614afe57601454604051636131910b60e11b815262ffffff871660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015614ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ad79190615cd0565b62ffffff861660009081526005602052604090206001600160401b03919091169081905590505b6002836004811115614b1257614b12614fb8565b03614b9d57601754604051631257fcdb60e31b8152614b95916001600160a01b0316906392bfe6d890614b4f90606089901c908690600401615928565b602060405180830381865afa158015614b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9091906158d1565b614eac565b9150506117e0565b6003836004811115614bb157614bb1614fb8565b03614bf957601654604051631190c4dd60e21b81526001600160601b03198616600482015260248101839052614b95916001600160a01b031690634643137490604401614b4f565b601854604051631257fcdb60e31b8152614b95916001600160a01b0316906392bfe6d890614b4f90606089901c908690600401615928565b62ffffff84166000908152600c60205260408120819081866004811115614c5a57614c5a614fb8565b6004811115614c6b57614c6b614fb8565b815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002090508280614cab5750805460ff165b614ce95760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b9a5d1a585b1a5cd959608a1b6044820152606401610b08565b614cf381856148ee565b91506001600160781b03821615614d9357614d0d84614eac565b81548290601090614d2f908490600160801b90046001600160801b0316615e7b565b82546001600160801b0391821661010093840a908102920219161790915582548492508391600191614d6e9185916001600160781b0391900416615894565b92506101000a8154816001600160781b0302191690836001600160781b031602179055505b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2898987604051614de493929190615e35565b60405180910390a450979650505050505050565b6001600160a01b038116600090815260018301602052604090205415614e1c575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600081815b84811015614ea357614e8f82878784818110614e8357614e8361563f565b90506020020135614ee0565b915080614e9b8161566b565b915050614e65565b50949350505050565b60006001600160801b038211156135cc576040516306dfcc6560e41b81526080600482015260248101839052604401610b08565b6000818310614efc576000828152602084905260409020610b64565b6000838152602083905260409020610b64565b508054614f1b90615824565b6000825580601f10614f2b575050565b601f0160209004906000526020600020908101906110ce91905b808211156135cc5760008155600101614f45565b6001600160a01b03811681146110ce57600080fd5b62ffffff811681146110ce57600080fd5b60008060408385031215614f9257600080fd5b8235614f9d81614f59565b91506020830135614fad81614f6e565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110614fec57634e487b7160e01b600052602160045260246000fd5b9052565b62ffffff81511682526bffffffffffffffffffffffff1960208201511660208301526001600160781b036040820151166040830152600060608201516150396060850182614fce565b505060809081015115159082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561508a5761507c838551614ff0565b938501939250600101615069565b50909695505050505050565b60008083601f8401126150a857600080fd5b5081356001600160401b038111156150bf57600080fd5b6020830191508360208260051b850101111561481b57600080fd5b6000806000806000606086880312156150f257600080fd5b85356001600160401b038082111561510957600080fd5b61511589838a01615096565b90975095506020880135915061512a82614f6e565b9093506040870135908082111561514057600080fd5b5061514d88828901615096565b969995985093965092949392505050565b6000806020838503121561517157600080fd5b82356001600160401b0381111561518757600080fd5b61519385828601615096565b90969095509350505050565b6000602082840312156151b157600080fd5b81356117e081614f59565b6000602082840312156151ce57600080fd5b5035919050565b6000602082840312156151e757600080fd5b81356001600160e01b0319811681146117e057600080fd5b60005b8381101561521a578181015183820152602001615202565b50506000910152565b6000815180845261523b8160208601602086016151ff565b601f01601f19169290920160200192915050565b8281526040602082015260006152686040830184615223565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561508a5783516001600160a01b03168352928401929184019160010161528c565b80151581146110ce57600080fd5b60008060008060008060a087890312156152d857600080fd5b86356152e381614f59565b955060208701356152f381614f59565b9450604087013561530381614f6e565b93506060870135615313816152b1565b925060808701356001600160401b0381111561532e57600080fd5b61533a89828a01615096565b979a9699509497509295939492505050565b803560058110613a3957600080fd5b60008060006060848603121561537057600080fd5b833561537b81614f59565b9250602084013561538b81614f6e565b91506153996040850161534c565b90509250925092565b600080604083850312156153b557600080fd5b82356153c081614f6e565b91506020830135614fad816152b1565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561540e5761540e6153d0565b604052919050565b60006001600160401b0382111561542f5761542f6153d0565b5060051b60200190565b600082601f83011261544a57600080fd5b8135602061545f61545a83615416565b6153e6565b82815260059290921b8401810191818101908684111561547e57600080fd5b8286015b848110156154a257803561549581614f59565b8352918301918301615482565b509695505050505050565b600080604083850312156154c057600080fd5b82356001600160401b03808211156154d757600080fd5b818501915085601f8301126154eb57600080fd5b813560206154fb61545a83615416565b82815260059290921b8401810191818101908984111561551a57600080fd5b948201945b838610156155385785358252948201949082019061551f565b9650508601359250508082111561554e57600080fd5b5061555b85828601615439565b9150509250929050565b60006020828403121561557757600080fd5b81356117e081614f6e565b6000806040838503121561559557600080fd5b82356155a081614f59565b91506020830135614fad81614f59565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561563157888603603f19018552825180518088529088019088880190845b8181101561561b5761560d838551614ff0565b938b019392506001016155fa565b50909750505093860193918601916001016155d8565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161567d5761567d615655565b5060010190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b878110156156d35784356156bf81614f59565b8416825293820193908201906001016156ac565b5098975050505050505050565b600082601f8301126156f157600080fd5b8151602061570161545a83615416565b82815260059290921b8401810191818101908684111561572057600080fd5b8286015b848110156154a257805161573781614f59565b8352918301918301615724565b6000806040838503121561575757600080fd5b82516001600160401b0381111561576d57600080fd5b615779858286016156e0565b925050602083015190509250929050565b80820180821115610b6757610b67615655565b81810381811115610b6757610b67615655565b8082028115828204841417610b6757610b67615655565b62ffffff8181168382160190808211156157e3576157e3615655565b5092915050565b6000602082840312156157fc57600080fd5b81516117e081614f6e565b60006020828403121561581957600080fd5b81516117e081614f59565b600181811c9082168061583857607f821691505b60208210810361225357634e487b7160e01b600052602260045260246000fd5b6000825161586a8184602087016151ff565b9190910192915050565b6001600160781b038181168382160190808211156157e3576157e3615655565b6001600160781b038281168282160390808211156157e3576157e3615655565b6000602082840312156158c657600080fd5b81516117e0816152b1565b6000602082840312156158e357600080fd5b5051919050565b62ffffff8281168282160390808211156157e3576157e3615655565b600062ffffff80831681810361591e5761591e615655565b6001019392505050565b6001600160a01b03929092168252602082015260400190565b6001600160601b0319811681146110ce57600080fd5b600082601f83011261596857600080fd5b8151602061597861545a83615416565b82815260059290921b8401810191818101908684111561599757600080fd5b8286015b848110156154a2578051835291830191830161599b565b600080604083850312156159c557600080fd5b82516001600160401b03808211156159dc57600080fd5b818501915085601f8301126159f057600080fd5b81516020615a0061545a83615416565b82815260059290921b84018101918181019089841115615a1f57600080fd5b948201945b83861015615a46578551615a3781615941565b82529482019490820190615a24565b91880151919650909350505080821115615a5f57600080fd5b5061555b85828601615957565b60008060408385031215615a7f57600080fd5b82516001600160401b0380821115615a9657600080fd5b615aa2868387016156e0565b93506020850151915080821115615a5f57600080fd5b60008060008060808587031215615ace57600080fd5b84516001600160401b0380821115615ae557600080fd5b615af1888389016156e0565b95506020870151915080821115615b0757600080fd5b50615b1487828801615957565b604087015160609097015195989097509350505050565b634e487b7160e01b600052600160045260246000fd5b60008235609e1983360301811261586a57600080fd5b600060208284031215615b6957600080fd5b610b648261534c565b601f8211156114db57600081815260208120601f850160051c81016020861015615b995750805b601f850160051c820191505b8181101561353257828155600101615ba5565b81516001600160401b03811115615bd157615bd16153d0565b615be581615bdf8454615824565b84615b72565b602080601f831160018114615c1a5760008415615c025750858301515b600019600386901b1c1916600185901b178555613532565b600085815260208120601f198616915b82811015615c4957888601518255948401946001909101908401615c2a565b5085821015615c675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b602081526000610b646020830184615223565b600060208284031215615ce257600080fd5b81516001600160401b03811681146117e057600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615d1e57615d1e615cf9565b500490565b600082615d3257615d32615cf9565b500690565b600060208284031215615d4957600080fd5b81356117e081615941565b80356001600160781b0381168114613a3957600080fd5b608081018235615d7a81614f6e565b62ffffff1682526020830135615d8f81615941565b6001600160601b03191660208301526001600160781b03615db260408501615d54565b166040830152615dc46060840161534c565b6157e36060840182614fce565b6000808335601e19843603018112615de857600080fd5b8301803591506001600160401b03821115615e0257600080fd5b6020019150600581901b360382131561481b57600080fd5b600060208284031215615e2c57600080fd5b610b6482615d54565b62ffffff8416815260608101615e4e6020830185614fce565b6001600160781b0383166040830152949350505050565b634e487b7160e01b600052603160045260246000fd5b6001600160801b038281168282160390808211156157e3576157e361565556fea2646970667358221220d408d187835baa2d8071ba082d6d3a06eab988fe63cdb7684c47d61ba60629bf64736f6c63430008140033", + "bytecode": "0x60c06040523480156200001157600080fd5b50604051620062da380380620062da833981016040819052620000349162000233565b828585620000438282620000a1565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600355600b805462ffffff191662ffffff1790556001600160a01b0390911660a05260805250620002a7915050565b600054600160a01b900460ff1615620001015760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001595760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000f8565b6001600160a01b038116620001a45760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000f8565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200023057600080fd5b50565b600080600080600060a086880312156200024c57600080fd5b855162000259816200021a565b60208701519095506200026c816200021a565b60408701519094506200027f816200021a565b606087015190935062000292816200021a565b80925050608086015190509295509295909350565b60805160a051615ff1620002e9600039600081816104a301528181611ba20152611c1001526000818161041c015281816124660152612e810152615ff16000f3fe6080604052600436106103355760003560e01c80638e467784116101ab578063d6c1dbee116100f7578063ea28edad11610095578063f5a983831161006f578063f5a9838314610aac578063faae7fc914610ac1578063fbde354d14610ae1578063fd95b2e014610b0157600080fd5b8063ea28edad14610a4a578063ef88bf1314610a5f578063f1367b7f14610a7f57600080fd5b8063deea13e7116100d1578063deea13e71461095c578063df33963814610971578063e17f212e14610a09578063e7dea8e614610a2a57600080fd5b8063d6c1dbee146108eb578063d8def8181461090b578063debfda301461093c57600080fd5b8063aa14544311610164578063b00c0b761161013e578063b00c0b761461086b578063b753801d1461088b578063c4db9619146108ab578063d6ac4f72146108cb57600080fd5b8063aa14544314610821578063af04cd3b14610841578063b006b4e31461085657600080fd5b80638e4677841461073b5780639a3410bc1461075b5780639edbf007146107775780639ee5de3314610797578063a02e86e5146107ed578063a71de6761461080057600080fd5b806351b42b001161028557806370562697116102235780637bf756c9116101fd5780637bf756c9146106a157806380b24173146106c257806384e10a90146106e25780638e33aba51461071b57600080fd5b8063705626971461062857806374e6310e146106515780637a17a34d1461067f57600080fd5b80635ff270791161025f5780635ff27079146105a857806362354e03146105c857806362d9c89a146105e857806367fc40291461060857600080fd5b806351b42b001461054a5780635267a15d1461055f5780635aa6e6751461059357600080fd5b80632ae07e9a116102f257806336300be2116102cc57806336300be2146104915780633ce7522a146104dd578063470ce087146104fd5780634b6e018d1461051d57600080fd5b80632ae07e9a1461040a5780632dafdbbf1461044c57806330c40bc91461047c57600080fd5b806302fb0c5e1461033a578063064be5321461037057806306c7e243146103915780630f15f4c0146103be57806315f253fb146103d55780631de56098146103f5575b600080fd5b34801561034657600080fd5b5060195461035b90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561037c57600080fd5b5060195461035b90600160a01b900460ff1681565b34801561039d57600080fd5b506103b16103ac366004614fd1565b610b16565b604051610367919061509f565b3480156103ca57600080fd5b506103d3610ba3565b005b3480156103e157600080fd5b506103d36103f036600461512c565b610bc0565b34801561040157600080fd5b506103d3610e55565b34801561041657600080fd5b5061043e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610367565b34801561045857600080fd5b50610461610fd7565b60408051938452602084019290925290820152606001610367565b34801561048857600080fd5b5061043e610ff6565b34801561049d57600080fd5b506104c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b3480156104e957600080fd5b506103d36104f83660046151b0565b611005565b34801561050957600080fd5b506103d36105183660046151f1565b611020565b34801561052957600080fd5b5061043e61053836600461520e565b600e6020526000908152604090205481565b34801561055657600080fd5b506103d36110e8565b34801561056b57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546104c5565b34801561059f57600080fd5b506104c56110ff565b3480156105b457600080fd5b506103d36105c3366004615227565b611196565b3480156105d457600080fd5b506000546104c5906001600160a01b031681565b3480156105f457600080fd5b506017546104c5906001600160a01b031681565b34801561061457600080fd5b506103d3610623366004615227565b611416565b34801561063457600080fd5b5061063d6114f7565b60405162ffffff9091168152602001610367565b34801561065d57600080fd5b5061067161066c366004615227565b611501565b6040516103679291906152a1565b34801561068b57600080fd5b506106946115a6565b60405161036791906152c2565b3480156106ad57600080fd5b5060175461035b90600160a01b900460ff1681565b3480156106ce57600080fd5b506013546104c5906001600160a01b031681565b3480156106ee57600080fd5b50601154601254600f54601054604080519485526020850193909352918301526060820152608001610367565b34801561072757600080fd5b5061043e610736366004615311565b61160b565b34801561074757600080fd5b506016546104c5906001600160a01b031681565b34801561076757600080fd5b50600b5461063d9062ffffff1681565b34801561078357600080fd5b506018546104c5906001600160a01b031681565b3480156107a357600080fd5b506107b76107b23660046153ad565b611662565b604080518251151581526020808401516001600160781b031690820152918101516001600160801b031690820152606001610367565b6103d36107fb3660046153f4565b61171f565b34801561080c57600080fd5b50600b546301000000900462ffffff1661043e565b34801561082d57600080fd5b5061043e61083c366004615422565b611885565b34801561084d57600080fd5b5061043e611937565b34801561086257600080fd5b506103d3611941565b34801561087757600080fd5b506103d361088636600461559f565b611985565b34801561089757600080fd5b506103d36108a63660046151b0565b611a60565b3480156108b757600080fd5b506014546104c5906001600160a01b031681565b3480156108d757600080fd5b5061043e6108e63660046151f1565b611ada565b3480156108f757600080fd5b506103d361090636600461520e565b611af3565b34801561091757600080fd5b50610920611de8565b6040805162ffffff938416815292909116602083015201610367565b34801561094857600080fd5b5061035b6109573660046151f1565b611e59565b34801561096857600080fd5b5061043e611edc565b34801561097d57600080fd5b506109e161098c366004615657565b62ffffff16600090815260066020908152604080832054600783528184205460088452828520546009855283862054600a90955292909420546001600160781b03918216959482169492821693821692911690565b604080519586526020860194909452928401919091526060830152608082015260a001610367565b348015610a1557600080fd5b5060005461035b90600160a81b900460ff1681565b348015610a3657600080fd5b506019546104c5906001600160a01b031681565b348015610a5657600080fd5b506103d3611f4a565b348015610a6b57600080fd5b506103d3610a7a366004615674565b611fe5565b348015610a8b57600080fd5b50610a9f610a9a3660046151f1565b61214b565b60405161036791906156a2565b348015610ab857600080fd5b506103d3612243565b348015610acd57600080fd5b506015546104c5906001600160a01b031681565b348015610aed57600080fd5b50601a546104c5906001600160a01b031681565b348015610b0d57600080fd5b506103d3612309565b6060610b218261234d565b610b3783610b2d61239d565b62ffffff166123d4565b62ffffff168262ffffff161015610b875760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b60448201526064015b60405180910390fd5b610b9082612400565b610b9a8383612449565b90505b92915050565b610bab612b21565b6019805460ff60a81b1916600160a81b179055565b610bc8612b7b565b610bd0612bd4565b610bd8612c3c565b60005b84811015610c2457610c12868683818110610bf857610bf8615731565b9050602002016020810190610c0d91906151f1565b612c66565b80610c1c8161575d565b915050610bdb565b50610c2e8361234d565b60145460405163712441d960e11b815260009182916001600160a01b039091169063e24883b290610c679033908b908b90600401615776565b600060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cac9190810190615836565b915091506000610cba61239d565b9050610cca600080878785612c8c565b5060009050805b88811015610e0a5760008a8a83818110610ced57610ced615731565b9050602002016020810190610d0291906151f1565b90506000868381518110610d1857610d18615731565b602002602001015190506000610d3283838d896000612e3d565b6001600160781b03169050816001600160a01b0316836001600160a01b031614610d7a57610d6482838d896001612e3d565b610d77906001600160781b03168261587c565b90505b86811015610dca5760405162461bcd60e51b815260206004820152601860248201527f636c61696d656420616d6f756e7420746f6f20736d616c6c00000000000000006044820152606401610b7e565b610dd4818661587c565b9450610de0878261588f565b90508015610df457610df482826001613097565b5050508080610e029061575d565b915050610cd1565b5080600f6000828254610e1d919061587c565b90915550610e38905033610e318a866158a2565b6000613097565b50505050610e466001600355565b610e4e613198565b5050505050565b600054600160b01b900460ff1680610e775750600054600160a81b900460ff16155b15610fca57610e846131df565b601954600160a81b900460ff16158015610eaa5750600b54600160301b900462ffffff16155b8015610ec25750600b546301000000900462ffffff16155b610f025760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b6044820152606401610b7e565b610f0a613217565b610f159060016158b9565b600b60066101000a81548162ffffff021916908362ffffff160217905550601560009054906101000a90046001600160a01b03166001600160a01b031663aec84ab66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa91906158dc565b600b60036101000a81548162ffffff021916908362ffffff160217905550565b610fd5600036613285565b565b601154601054600f546000918291610fef919061587c565b9050909192565b60006110006133d1565b905090565b61101a600080848461101561239d565b612c8c565b50505050565b600054600160b01b900460ff16806110425750600054600160a81b900460ff16155b156110da5761104f6131df565b601a546001600160a01b0316156110965760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610b7e565b6001600160a01b0381166110bc5760405162461bcd60e51b8152600401610b7e906158f9565b601a80546001600160a01b0319166001600160a01b03831617905550565b6110e5600036613285565b50565b6110f0612b21565b6019805460ff60a81b19169055565b60008054600160a81b900460ff1661112157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611000919061591f565b61119f33611e59565b6111db5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610b7e565b6001600160e01b03198116600090815260026020526040812080549091036112455760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b7e565b80544210156112965760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610b7e565b60008160010180546112a79061593c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d39061593c565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506113526001830182614f61565b50506000805460ff60b01b1916600160b01b1781556040513090611377908490615970565b6000604051808303816000865af19150503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161101a816133ee565b61141e612b21565b6001600160e01b0319811660009081526002602052604081205490036114865760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b7e565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906114f26001830182614f61565b505050565b6000611000613217565b600260205260009081526040902080546001820180549192916115239061593c565b80601f016020809104026020016040519081016040528092919081815260200182805461154f9061593c565b801561159c5780601f106115715761010080835404028352916020019161159c565b820191906000526020600020905b81548152906001019060200180831161157f57829003601f168201915b5050505050905082565b6060601b60000180548060200260200160405190810160405280929190818152602001828054801561160157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115e3575b5050505050905090565b6000611615612b7b565b61161d612bd4565b611625612c3c565b33878761163383838361340b565b6116418a8a8a8a8a8a61349b565b93505050506116506001600355565b611658613198565b9695505050505050565b604080516060810182526000808252602080830182905282840182905262ffffff86168252600c905291822090918360048111156116a2576116a261500a565b60048111156116b3576116b361500a565b8152602080820192909252604090810160009081206001600160a01b038816825283528190208151606081018352905460ff81161515825261010081046001600160781b031693820193909352600160801b9092046001600160801b03169082015290505b9392505050565b611727613599565b61172f612bd4565b611737613217565b62ffffff168262ffffff1610156117905760405162461bcd60e51b815260206004820152601b60248201527f7265776172642065706f636820696420696e20746865207061737400000000006044820152606401610b7e565b611799346135f7565b62ffffff8316600090815260066020526040812080549091906117c69084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555034601160008282546117fc919061587c565b9091555050801561187957611810346135f7565b62ffffff83166000908152600760205260408120805490919061183d9084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055503460126000828254611873919061587c565b90915550505b611881613198565b5050565b600061188f612b7b565b611897612bd4565b61189f612c3c565b8787876118ad83838361340b565b6013546001600160a01b031633146119075760405162461bcd60e51b815260206004820152601e60248201527f6f6e6c79206674736f20726577617264206d616e616765722070726f787900006044820152606401610b7e565b6119158a8a8a8a8a8a61349b565b93505050506119246001600355565b61192c613198565b979650505050505050565b600061100061362f565b600054600160b01b900460ff16806119635750600054600160a81b900460ff16155b15610fca576119706131df565b6017805460ff60a01b1916600160a01b179055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146119fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610b7e565b611a56611a3283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b81525061364e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b611881828261370a565b600054600160b01b900460ff1680611a825750600054600160a81b900460ff16155b15611acf57611a8f6131df565b611881828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250601b939250506139869050565b611881600036613285565b6000611ae882610b2d61239d565b62ffffff1692915050565b6015546001600160a01b0316331480611b165750601a546001600160a01b031633145b611b525760405162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b6044820152606401610b7e565b600b546301000000900462ffffff168114611ba05760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b6044820152606401610b7e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611bf55750600b54611bed90600160301b900462ffffff1660326158b9565b62ffffff1681105b15611c7557604051636b60edf760e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d6c1dbee90602401600060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050505b611c88611c8382600161587c565b613999565b600b805462ffffff9290921663010000000265ffffff0000001990921691909117905560405181907f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa5890600090a26000818152600a60209081526040808320546009909252822054611d06916001600160781b03908116911661598c565b600083815260066020526040902054611d2891906001600160781b03166159ac565b90506001600160781b0381161561188157806001600160781b031660106000828254611d54919061587c565b90915550506000828152600a602052604081208054839290611d809084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061dead6001600160a01b03166108fc826001600160781b03169081150290604051600060405180830381858888f193505050501580156114f2573d6000803e3d6000fd5b600080611df361239d565b9150611dfe826139c9565b611e4a5760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c652072657761726473006044820152606401610b7e565b611e5382613a47565b90509091565b60008054600160a01b900460ff168015610b9d5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9d91906159cc565b6018546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100091906159e9565b611f52612b21565b600b5462ffffff90811614611f9b5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610b7e565b611fa3613217565b600b805462ffffff191662ffffff9290921691821790556040517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a0890600090a2565b600054600160a01b900460ff16156120365760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610b7e565b6001600160a01b03821661208c5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610b7e565b6001600160a01b0381166120d55760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610b7e565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6060600061215b83610b2d61239d565b9050612166816139c9565b1561223d57600061217682613a47565b90506121828282615a02565b61218d9060016158b9565b62ffffff166001600160401b038111156121a9576121a96154c2565b6040519080825280602002602001820160405280156121dc57816020015b60608152602001906001900390816121c75790505b509250815b8162ffffff168162ffffff161161223a576121fc8582612449565b846122078584615a02565b62ffffff168151811061221c5761221c615731565b6020026020010181905250808061223290615a1e565b9150506121e1565b50505b50919050565b61224b612b21565b600054600160a81b900460ff16156122a55760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610b7e565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061232b5750600054600160a81b900460ff16155b15610fca576123386131df565b6019805460ff60a01b1916600160a01b179055565b612355613217565b62ffffff168162ffffff16106110e55760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b6044820152606401610b7e565b600b5460009061100090611c839062ffffff166123cf6123bb6133d1565b600b546301000000900462ffffff16613aa1565b613aa1565b6001600160a01b038216600090815260046020526040812054610b9a90611c839062ffffff1684613aa1565b612409816139c9565b6110e55760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b7e565b60155460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526060916000916001600160a01b039091169063c581e79190604401602060405180830381865afa1580156124c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e691906159e9565b905060006124f384613ab7565b9050600061253f60405180610100016040528060608152602001606081526020016060815260200160608152602001600081526020016060815260200160608152602001600081525090565b6017546001600160a01b0316156125dd576017546040516325f48f9960e11b81526001600160a01b0390911690634be91f3290612582908a908790600401615a40565b600060405180830381865afa15801561259f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125c79190810190615aca565b6020830152808252516125da908361587c565b91505b6019546001600160a01b03161561267f576019546040516325f48f9960e11b81526001600160a01b0390911690634be91f3290612620908a908790600401615a40565b600060405180830381865afa15801561263d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126659190810190615b84565b6060830152604082018190525161267c908361587c565b91505b60185460405163277166bf60e11b81526001600160a01b0390911690634ee2cd7e906126b1908a908790600401615a40565b602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f291906159e9565b60808201819052156128785760185460405163ed475a7960e01b81526001600160a01b039091169063ed475a7990612730908a908790600401615a40565b600060405180830381865afa15801561274d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127759190810190615bd0565b505060c083015260a082018190525161278e908361587c565b91506000805b8260c00151518110156127de578260c0015181815181106127b7576127b7615731565b6020026020010151826127ca919061587c565b9150806127d68161575d565b915050612794565b5061271081101561287657601854604051634181ad4160e11b81526001600160a01b03909116906383035a829061281b908b908890600401615a40565b602060405180830381865afa158015612838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285c91906159e9565b60e08301819052156128765761287360018461587c565b92505b505b62ffffff86166000908152600e6020526040902054841115826001600160401b038111156128a8576128a86154c2565b60405190808252806020026020018201604052801561290157816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816128c65790505b5095506000808360e00151111561294d576129248860028b8660e0015186613b56565b878261292f8161575d565b93508151811061294157612941615731565b60200260200101819052505b60005b8360a00151518110156129fa576129bf8960028660a00151848151811061297957612979615731565b60200260200101516129b98860c00151868151811061299a5761299a615731565b60200260200101516127108a60800151613c619092919063ffffffff16565b87613b56565b88836129ca8161575d565b9450815181106129dc576129dc615731565b602002602001018190525080806129f29061575d565b915050612950565b5060005b835151811015612a8e57612a5389600386600001518481518110612a2457612a24615731565b602002602001015160601c87602001518581518110612a4557612a45615731565b602002602001015187613b56565b8883612a5e8161575d565b945081518110612a7057612a70615731565b60200260200101819052508080612a869061575d565b9150506129fe565b5060005b836040015151811015612b1457612ad989600486604001518481518110612abb57612abb615731565b602002602001015187606001518581518110612a4557612a45615731565b8883612ae48161575d565b945081518110612af657612af6615731565b60200260200101819052508080612b0c9061575d565b915050612a92565b5050505050505092915050565b612b296110ff565b6001600160a01b0316336001600160a01b031614610fd55760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610b7e565b601954600160a81b900460ff16610fd55760405162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e616765722064656163746976617465640000000000006044820152606401610b7e565b600034612bdf61362f565b612be9919061587c565b90504781811115612c2c5761dead6108fc612c04848461588f565b6040518115909202916000818181858888f193505050501580156114f2573d6000803e3d6000fd5b8181101561188157611881615c43565b600260035403612c5f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b6001600160a01b0381166110e55760405162461bcd60e51b8152600401610b7e906158f9565b60008060005b84811015612e32578362ffffff16868683818110612cb257612cb2615731565b9050602002810190612cc49190615c59565b612cd5906040810190602001615657565b62ffffff161015612d1f5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c9908195c1bd8da08195e1c1a5c995960621b6044820152606401610b7e565b6000868683818110612d3357612d33615731565b9050602002810190612d459190615c59565b612d569060a0810190608001615c6f565b90506000816004811115612d6c57612d6c61500a565b1480612d8957506001816004811115612d8757612d8761500a565b145b15612df3576001600160a01b03891615612dee57600080612dce8b8b8b8b88818110612db757612db7615731565b9050602002810190612dc99190615c59565b613d87565b9092509050612ddd828761598c565b9550612de9818661598c565b945050505b612e1f565b612e1f878784818110612e0857612e08615731565b9050602002810190612e1a9190615c59565b614169565b5080612e2a8161575d565b915050612c92565b509550959350505050565b600080612e4f878562ffffff166123d4565b9050805b8562ffffff168162ffffff161161301f5760155460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526000916001600160a01b03169063c581e79190604401602060405180830381865afa158015612ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efc91906159e9565b905080600003612f0f57612f0f82612400565b62ffffff82166000908152600e602052604081205482111590612f3184613ab7565b90506000612f428c8c878587614322565b612f4c908261598c565b905087612fa9576017546001600160a01b031615612f7e57612f718c8c878587614590565b612f7b908261598c565b90505b6019546001600160a01b031615612fa957612f9c8c8c87858761468b565b612fa6908261598c565b90505b62ffffff851660009081526009602052604081208054839290612fd69084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055508087613006919061598c565b965050505050808061301790615a1e565b915050612e53565b5061302b8560016158b9565b6001600160a01b03881660009081526004602052604090205462ffffff9182169116101561308d5761305e8560016158b9565b6001600160a01b0388166000908152600460205260409020805462ffffff191662ffffff929092169190911790555b5095945050505050565b80156131035760185460405163b760faf960e01b81526001600160a01b0385811660048301529091169063b760faf99084906024016000604051808303818588803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505050505050565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114613150576040519150601f19603f3d011682016040523d82523d6000602084013e613155565b606091505b505090508061101a5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b7e565b6131a061362f565b4714610fd55760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610b7e565b600054600160b01b900460ff161561320f5733301461320057613200615c43565b6000805460ff60b01b19169055565b610fd5612b21565b60155460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100091906158dc565b61328d612b21565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156132d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fd91906159e9565b9050600061330b824261587c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906133899082615cd8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516133c29493929190615d97565b60405180910390a15050505050565b600b54600090610b9d90600160301b900462ffffff166001614769565b3d604051818101604052816000823e8215613407578181f35b8181fd5b816001600160a01b0316836001600160a01b03160361342957505050565b60145460405163ce2caa5760e01b81526001600160a01b038581166004830152848116602483015283811660448301529091169063ce2caa579060640160006040518083038186803b15801561347e57600080fd5b505afa158015613492573d6000803e3d6000fd5b50505050505050565b60006134a686612c66565b6134af8561234d565b60006134b961239d565b905060006134ca8989878786612c8c565b6001600160781b03909116935090506134e7898989856000612e3d565b6134fa906001600160781b03168461587c565b92506001600160781b0381161561356457806001600160781b031660106000828254613526919061587c565b909155505060405161dead906001600160781b03831680156108fc02916000818181858888f19350505050158015613562573d6000803e3d6000fd5b505b821561358d5782600f600082825461357c919061587c565b9091555061358d9050888488613097565b50509695505050505050565b336000908152601c60205260408120549003610fd55760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920726577617264206f6666657273206d616e616765720000000000006044820152606401610b7e565b60006001600160781b0382111561362b576040516306dfcc6560e41b81526078600482015260248101839052604401610b7e565b5090565b6000601054600f54601154613644919061588f565b611000919061588f565b600080826040516020016136629190615ddd565b6040516020818303038152906040528051906020012090506000805b86518110156136da5786818151811061369957613699615731565b602002602001015183036136c8578581815181106136b9576136b9615731565b602002602001015191506136da565b806136d28161575d565b91505061367e565b506001600160a01b0381166137015760405162461bcd60e51b8152600401610b7e906158f9565b95945050505050565b61373e82826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b81525061364e565b601460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061379a828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b81525061364e565b601560006101000a8154816001600160a01b0302191690836001600160a01b031602179055506137f9828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b81525061364e565b601680546001600160a01b0319166001600160a01b0392909216919091179055601754600160a01b900460ff16156138805761385f8282604051806040016040528060118152602001702821b430b4b729ba30b5b2a6b4b93937b960791b81525061364e565b601780546001600160a01b0319166001600160a01b03929092169190911790555b601954600160a01b900460ff16156138e1576138c082826040518060400160405280600b81526020016a43436861696e5374616b6560a81b81525061364e565b601980546001600160a01b0319166001600160a01b03929092169190911790555b61390882826040518060400160405280600481526020016315d3985d60e21b81525061364e565b601860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613962828260405180604001604052806011815260200170233a39b7a932bbb0b93226b0b730b3b2b960791b81525061364e565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b61398f8261478f565b611881828261481a565b600062ffffff82111561362b576040516306dfcc6560e41b81526018600482015260248101839052604401610b7e565b601554604051633238037160e11b815262ffffff8316600482015260009182916001600160a01b039091169063647006e290602401602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f91906159e9565b141592915050565b600080613a52613217565b62ffffff169050613a648360016158b9565b91505b808262ffffff16108015613a7f5750613a7f826139c9565b15613a965781613a8e81615a1e565b925050613a67565b611718600183615a02565b6000818311613ab05781610b9a565b5090919050565b62ffffff811660009081526005602052604081205490819003613b5157601554604051636131910b60e11b815262ffffff841660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015613b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b459190615df0565b6001600160401b031690505b919050565b6040805160a08101825260009181018290526060808201838152608083019390935262ffffff8816825285901b6001600160601b031916602082015290856004811115613ba557613ba561500a565b90816004811115613bb857613bb861500a565b90525062ffffff86166000908152600c6020526040812081876004811115613be257613be261500a565b6004811115613bf357613bf361500a565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002090508280613c335750805460ff165b158015608084015261308d57613c49818561485b565b6001600160781b031660408301525095945050505050565b6000808211613ca55760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610b7e565b83600003613cb557506000611718565b83830283858281613cc857613cc8615e19565b0403613ce657828181613cdd57613cdd615e19565b04915050611718565b506000613cf38386615e2f565b90506000613d018487615e43565b90506000613d0f8587615e2f565b90506000613d1d8688615e43565b905085613d2a82856158a2565b613d349190615e2f565b613d3e83856158a2565b613d4883876158a2565b88613d5386896158a2565b613d5d91906158a2565b613d67919061587c565b613d71919061587c565b613d7b919061587c565b98975050505050505050565b600080602083016001600160a01b038616613da86060860160408701615e57565b60601c14613dec5760405162461bcd60e51b815260206004820152601160248201527077726f6e672062656e656669636961727960781b6044820152606401610b7e565b600081604051602001613dff9190615e8b565b60408051601f1981840301815291905280516020918201209150600d90600090613e2b90850185615657565b62ffffff1681526020808201929092526040908101600090812084825290925290205460ff1661415f57613e5f85826148d7565b613e84613e6f6020840184615657565b613e7f6060850160408601615ef1565b6149bc565b93506001613e986080840160608501615c6f565b6004811115613ea957613ea961500a565b03614047576016546000906001600160a01b0316639350f57c613ecf6020860186615657565b6040516001600160e01b031960e084901b16815262ffffff90911660048201526001600160a01b038b166024820152604401602060405180830381865afa158015613f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4291906159e9565b9050801561404557613f7b613f76613f676001600160781b03881684620f4240613c61565b876001600160781b0316614a75565b6135f7565b9350613f8784866159ac565b945083600a6000613f9b6020870187615657565b62ffffff168152602081019190915260400160009081208054909190613fcb9084906001600160781b031661598c565b82546001600160781b039182166101009390930a92830291909202199091161790555061dead6001600160a01b038916807f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d261402a6020880188615657565b60018960405161403c93929190615f0c565b60405180910390a45b505b83600960006140596020860186615657565b62ffffff1681526020810191909152604001600090812080549091906140899084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506001600d60008460000160208101906140c69190615657565b62ffffff16815260208082019290925260409081016000908120858252835220805460ff1916921515929092179091556001600160a01b03878116919089169081907f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d29061413690870187615657565b6141466080880160608901615c6f565b8960405161415693929190615f0c565b60405180910390a45b5050935093915050565b602081016000600c8161417f6040860185615657565b62ffffff16815260200190815260200160002060008360600160208101906141a79190615c6f565b60048111156141b8576141b861500a565b60048111156141c9576141c961500a565b815260200190815260200160002060008360200160208101906141ec9190615e57565b60601c81526020810191909152604001600020805490915060ff166114f25760008260405160200161421e9190615e8b565b60405160208183030381529060405280519060200120905061424084826148d7565b815460ff1916600117825561426b61425b6020850185615657565b613e7f6060860160408701615ef1565b82546001600160781b0391909116610100026fffffffffffffffffffffffffffffff00199091161782556142ca6142a56020850185615657565b6142b56040860160208701615e57565b6142c56080870160608801615c6f565b614a84565b82546001600160801b03918216600160801b0291161782556001600e60006142f56020870187615657565b62ffffff1681526020019081526020016000206000828254614317919061587c565b909155505050505050565b60185460405163277166bf60e11b815260009182916001600160a01b0390911690634ee2cd7e90614359908a908890600401615a40565b602060405180830381865afa158015614376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439a91906159e9565b9050801561308d5760185460405163ed475a7960e01b8152600091829182916001600160a01b03169063ed475a79906143d9908d908b90600401615a40565b600060405180830381865afa1580156143f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261441e9190810190615bd0565b505081519193509150156144de5760005b82518110156144dc57600061446a83838151811061444f5761444f615731565b602002602001015161271088613c619092919063ffffffff16565b905082828151811061447e5761447e615731565b602002602001015185614491919061587c565b94506144bc8483815181106144a8576144a8615731565b60200260200101518d8d8d6002868e614c6b565b6144c6908861598c565b96505080806144d49061575d565b91505061442f565b505b61271083101561458357601854604051634181ad4160e11b81526000916001600160a01b0316906383035a829061451b908e908c90600401615a40565b602060405180830381865afa158015614538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061455c91906159e9565b90508015614581576145748b8c8c8c6002868d614c6b565b61457e908761598c565b95505b505b5050505095945050505050565b6017546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f32906145c7908b908990600401615a40565b600060405180830381865afa1580156145e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261460c9190810190615aca565b9150915060005b825181101561467f5761466183828151811061463157614631615731565b602002602001015160601c8a8a8a600387878151811061465357614653615731565b60200260200101518b614c6b565b61466b908561598c565b9350806146778161575d565b915050614613565b50505095945050505050565b6019546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f32906146c2908b908990600401615a40565b600060405180830381865afa1580156146df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147079190810190615b84565b9150915060005b825181101561467f5761474b83828151811061472c5761472c615731565b60200260200101518a8a8a600487878151811061465357614653615731565b614755908561598c565b9350806147618161575d565b91505061470e565b6000808383111561477f57506000905080614788565b50600190508183035b9250929050565b8054156110e557805460018083019160009184916147ad919061588f565b815481106147bd576147bd615731565b60009182526020808320909101546001600160a01b0316835282019290925260400181205580548190806147f3576147f3615f3c565b600082815260209020810160001990810180546001600160a01b031916905501905561478f565b60005b81518110156114f2576148498383838151811061483c5761483c615731565b6020026020010151614e32565b806148538161575d565b91505061481d565b60008160000361486d57506000610b9d565b825461010090046001600160781b03166000819003614890576000915050610b9d565b8354600160801b90046001600160801b03168084036148b157509050610b9d565b8084106148c0576148c0615c43565b613701613f766001600160781b0384168684613c61565b6015546000906001600160a01b031663647006e26148fb6040860160208701615657565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa15801561493b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495f91906159e9565b905061497981836149708680615f52565b90929091614e9a565b6114f25760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b7e565b62ffffff821660009081526006602090815260408083205460089092529091205482916001600160781b0390811691166149f6838261598c565b6001600160781b0316826001600160781b03161015614a1c57614a1981836159ac565b92505b62ffffff851660009081526008602052604081208054859290614a499084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550505092915050565b6000818310613ab05781610b9a565b62ffffff8316600090815260056020526040812054808203614b3857601554604051636131910b60e11b815262ffffff871660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190615df0565b62ffffff861660009081526005602052604090206001600160401b03919091169081905590505b6002836004811115614b4c57614b4c61500a565b03614bd757601854604051631257fcdb60e31b8152614bcf916001600160a01b0316906392bfe6d890614b8990606089901c908690600401615a40565b602060405180830381865afa158015614ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bca91906159e9565b614eb2565b915050611718565b6003836004811115614beb57614beb61500a565b03614c3357601754604051631190c4dd60e21b81526001600160601b03198616600482015260248101839052614bcf916001600160a01b031690634643137490604401614b89565b601954604051631257fcdb60e31b8152614bcf916001600160a01b0316906392bfe6d890614b8990606089901c908690600401615a40565b62ffffff84166000908152600c60205260408120819081866004811115614c9457614c9461500a565b6004811115614ca557614ca561500a565b815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002090508280614ce55750805460ff165b614d235760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b9a5d1a585b1a5cd959608a1b6044820152606401610b7e565b614d2d818561485b565b91506001600160781b03821615614dcd57614d4784614eb2565b81548290601090614d69908490600160801b90046001600160801b0316615f9b565b82546001600160801b0391821661010093840a908102920219161790915582548492508391600191614da89185916001600160781b03919004166159ac565b92506101000a8154816001600160781b0302191690836001600160781b031602179055505b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2898987604051614e1e93929190615f0c565b60405180910390a450979650505050505050565b6001600160a01b038116600090815260018301602052604090205415614e56575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600082614ea8868685614ee6565b1495945050505050565b60006001600160801b0382111561362b576040516306dfcc6560e41b81526080600482015260248101839052604401610b7e565b600081815b84811015614f2957614f1582878784818110614f0957614f09615731565b90506020020135614f32565b915080614f218161575d565b915050614eeb565b50949350505050565b6000818310614f4e576000828152602084905260409020610b9a565b6000838152602083905260409020610b9a565b508054614f6d9061593c565b6000825580601f10614f7d575050565b601f0160209004906000526020600020908101906110e591905b8082111561362b5760008155600101614f97565b6001600160a01b03811681146110e557600080fd5b62ffffff811681146110e557600080fd5b60008060408385031215614fe457600080fd5b8235614fef81614fab565b91506020830135614fff81614fc0565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6005811061503e57634e487b7160e01b600052602160045260246000fd5b9052565b62ffffff81511682526bffffffffffffffffffffffff1960208201511660208301526001600160781b0360408201511660408301526000606082015161508b6060850182615020565b505060809081015115159082015260a00190565b6020808252825182820181905260009190848201906040850190845b818110156150dc576150ce838551615042565b9385019392506001016150bb565b50909695505050505050565b60008083601f8401126150fa57600080fd5b5081356001600160401b0381111561511157600080fd5b6020830191508360208260051b850101111561478857600080fd5b60008060008060006060868803121561514457600080fd5b85356001600160401b038082111561515b57600080fd5b61516789838a016150e8565b90975095506020880135915061517c82614fc0565b9093506040870135908082111561519257600080fd5b5061519f888289016150e8565b969995985093965092949392505050565b600080602083850312156151c357600080fd5b82356001600160401b038111156151d957600080fd5b6151e5858286016150e8565b90969095509350505050565b60006020828403121561520357600080fd5b813561171881614fab565b60006020828403121561522057600080fd5b5035919050565b60006020828403121561523957600080fd5b81356001600160e01b03198116811461171857600080fd5b60005b8381101561526c578181015183820152602001615254565b50506000910152565b6000815180845261528d816020860160208601615251565b601f01601f19169290920160200192915050565b8281526040602082015260006152ba6040830184615275565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156150dc5783516001600160a01b0316835292840192918401916001016152de565b80151581146110e557600080fd5b60008060008060008060a0878903121561532a57600080fd5b863561533581614fab565b9550602087013561534581614fab565b9450604087013561535581614fc0565b9350606087013561536581615303565b925060808701356001600160401b0381111561538057600080fd5b61538c89828a016150e8565b979a9699509497509295939492505050565b803560058110613b5157600080fd5b6000806000606084860312156153c257600080fd5b83356153cd81614fab565b925060208401356153dd81614fc0565b91506153eb6040850161539e565b90509250925092565b6000806040838503121561540757600080fd5b823561541281614fc0565b91506020830135614fff81615303565b600080600080600080600060c0888a03121561543d57600080fd5b873561544881614fab565b9650602088013561545881614fab565b9550604088013561546881614fab565b9450606088013561547881614fc0565b9350608088013561548881615303565b925060a08801356001600160401b038111156154a357600080fd5b6154af8a828b016150e8565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615500576155006154c2565b604052919050565b60006001600160401b03821115615521576155216154c2565b5060051b60200190565b600082601f83011261553c57600080fd5b8135602061555161554c83615508565b6154d8565b82815260059290921b8401810191818101908684111561557057600080fd5b8286015b8481101561559457803561558781614fab565b8352918301918301615574565b509695505050505050565b600080604083850312156155b257600080fd5b82356001600160401b03808211156155c957600080fd5b818501915085601f8301126155dd57600080fd5b813560206155ed61554c83615508565b82815260059290921b8401810191818101908984111561560c57600080fd5b948201945b8386101561562a57853582529482019490820190615611565b9650508601359250508082111561564057600080fd5b5061564d8582860161552b565b9150509250929050565b60006020828403121561566957600080fd5b813561171881614fc0565b6000806040838503121561568757600080fd5b823561569281614fab565b91506020830135614fff81614fab565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561572357888603603f19018552825180518088529088019088880190845b8181101561570d576156ff838551615042565b938b019392506001016156ec565b50909750505093860193918601916001016156ca565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161576f5761576f615747565b5060010190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b878110156157c55784356157b181614fab565b84168252938201939082019060010161579e565b5098975050505050505050565b600082601f8301126157e357600080fd5b815160206157f361554c83615508565b82815260059290921b8401810191818101908684111561581257600080fd5b8286015b8481101561559457805161582981614fab565b8352918301918301615816565b6000806040838503121561584957600080fd5b82516001600160401b0381111561585f57600080fd5b61586b858286016157d2565b925050602083015190509250929050565b80820180821115610b9d57610b9d615747565b81810381811115610b9d57610b9d615747565b8082028115828204841417610b9d57610b9d615747565b62ffffff8181168382160190808211156158d5576158d5615747565b5092915050565b6000602082840312156158ee57600080fd5b815161171881614fc0565b6020808252600c908201526b61646472657373207a65726f60a01b604082015260600190565b60006020828403121561593157600080fd5b815161171881614fab565b600181811c9082168061595057607f821691505b60208210810361223d57634e487b7160e01b600052602260045260246000fd5b60008251615982818460208701615251565b9190910192915050565b6001600160781b038181168382160190808211156158d5576158d5615747565b6001600160781b038281168282160390808211156158d5576158d5615747565b6000602082840312156159de57600080fd5b815161171881615303565b6000602082840312156159fb57600080fd5b5051919050565b62ffffff8281168282160390808211156158d5576158d5615747565b600062ffffff808316818103615a3657615a36615747565b6001019392505050565b6001600160a01b03929092168252602082015260400190565b6001600160601b0319811681146110e557600080fd5b600082601f830112615a8057600080fd5b81516020615a9061554c83615508565b82815260059290921b84018101918181019086841115615aaf57600080fd5b8286015b848110156155945780518352918301918301615ab3565b60008060408385031215615add57600080fd5b82516001600160401b0380821115615af457600080fd5b818501915085601f830112615b0857600080fd5b81516020615b1861554c83615508565b82815260059290921b84018101918181019089841115615b3757600080fd5b948201945b83861015615b5e578551615b4f81615a59565b82529482019490820190615b3c565b91880151919650909350505080821115615b7757600080fd5b5061564d85828601615a6f565b60008060408385031215615b9757600080fd5b82516001600160401b0380821115615bae57600080fd5b615bba868387016157d2565b93506020850151915080821115615b7757600080fd5b60008060008060808587031215615be657600080fd5b84516001600160401b0380821115615bfd57600080fd5b615c09888389016157d2565b95506020870151915080821115615c1f57600080fd5b50615c2c87828801615a6f565b604087015160609097015195989097509350505050565b634e487b7160e01b600052600160045260246000fd5b60008235609e1983360301811261598257600080fd5b600060208284031215615c8157600080fd5b610b9a8261539e565b601f8211156114f257600081815260208120601f850160051c81016020861015615cb15750805b601f850160051c820191505b81811015615cd057828155600101615cbd565b505050505050565b81516001600160401b03811115615cf157615cf16154c2565b615d0581615cff845461593c565b84615c8a565b602080601f831160018114615d3a5760008415615d225750858301515b600019600386901b1c1916600185901b178555615cd0565b600085815260208120601f198616915b82811015615d6957888601518255948401946001909101908401615d4a565b5085821015615d875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b602081526000610b9a6020830184615275565b600060208284031215615e0257600080fd5b81516001600160401b038116811461171857600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615e3e57615e3e615e19565b500490565b600082615e5257615e52615e19565b500690565b600060208284031215615e6957600080fd5b813561171881615a59565b80356001600160781b0381168114613b5157600080fd5b608081018235615e9a81614fc0565b62ffffff1682526020830135615eaf81615a59565b6001600160601b03191660208301526001600160781b03615ed260408501615e74565b166040830152615ee46060840161539e565b6158d56060840182615020565b600060208284031215615f0357600080fd5b610b9a82615e74565b62ffffff8416815260608101615f256020830185615020565b6001600160781b0383166040830152949350505050565b634e487b7160e01b600052603160045260246000fd5b6000808335601e19843603018112615f6957600080fd5b8301803591506001600160401b03821115615f8357600080fd5b6020019150600581901b360382131561478857600080fd5b6001600160801b038281168282160390808211156158d5576158d561574756fea26469706673582212209f7fce371d19012bd087d044ab7ec79ea86d70327322d541ae3849479f03d85f64736f6c63430008140033", + "deployedBytecode": "0x6080604052600436106103355760003560e01c80638e467784116101ab578063d6c1dbee116100f7578063ea28edad11610095578063f5a983831161006f578063f5a9838314610aac578063faae7fc914610ac1578063fbde354d14610ae1578063fd95b2e014610b0157600080fd5b8063ea28edad14610a4a578063ef88bf1314610a5f578063f1367b7f14610a7f57600080fd5b8063deea13e7116100d1578063deea13e71461095c578063df33963814610971578063e17f212e14610a09578063e7dea8e614610a2a57600080fd5b8063d6c1dbee146108eb578063d8def8181461090b578063debfda301461093c57600080fd5b8063aa14544311610164578063b00c0b761161013e578063b00c0b761461086b578063b753801d1461088b578063c4db9619146108ab578063d6ac4f72146108cb57600080fd5b8063aa14544314610821578063af04cd3b14610841578063b006b4e31461085657600080fd5b80638e4677841461073b5780639a3410bc1461075b5780639edbf007146107775780639ee5de3314610797578063a02e86e5146107ed578063a71de6761461080057600080fd5b806351b42b001161028557806370562697116102235780637bf756c9116101fd5780637bf756c9146106a157806380b24173146106c257806384e10a90146106e25780638e33aba51461071b57600080fd5b8063705626971461062857806374e6310e146106515780637a17a34d1461067f57600080fd5b80635ff270791161025f5780635ff27079146105a857806362354e03146105c857806362d9c89a146105e857806367fc40291461060857600080fd5b806351b42b001461054a5780635267a15d1461055f5780635aa6e6751461059357600080fd5b80632ae07e9a116102f257806336300be2116102cc57806336300be2146104915780633ce7522a146104dd578063470ce087146104fd5780634b6e018d1461051d57600080fd5b80632ae07e9a1461040a5780632dafdbbf1461044c57806330c40bc91461047c57600080fd5b806302fb0c5e1461033a578063064be5321461037057806306c7e243146103915780630f15f4c0146103be57806315f253fb146103d55780631de56098146103f5575b600080fd5b34801561034657600080fd5b5060195461035b90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561037c57600080fd5b5060195461035b90600160a01b900460ff1681565b34801561039d57600080fd5b506103b16103ac366004614fd1565b610b16565b604051610367919061509f565b3480156103ca57600080fd5b506103d3610ba3565b005b3480156103e157600080fd5b506103d36103f036600461512c565b610bc0565b34801561040157600080fd5b506103d3610e55565b34801561041657600080fd5b5061043e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610367565b34801561045857600080fd5b50610461610fd7565b60408051938452602084019290925290820152606001610367565b34801561048857600080fd5b5061043e610ff6565b34801561049d57600080fd5b506104c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b3480156104e957600080fd5b506103d36104f83660046151b0565b611005565b34801561050957600080fd5b506103d36105183660046151f1565b611020565b34801561052957600080fd5b5061043e61053836600461520e565b600e6020526000908152604090205481565b34801561055657600080fd5b506103d36110e8565b34801561056b57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546104c5565b34801561059f57600080fd5b506104c56110ff565b3480156105b457600080fd5b506103d36105c3366004615227565b611196565b3480156105d457600080fd5b506000546104c5906001600160a01b031681565b3480156105f457600080fd5b506017546104c5906001600160a01b031681565b34801561061457600080fd5b506103d3610623366004615227565b611416565b34801561063457600080fd5b5061063d6114f7565b60405162ffffff9091168152602001610367565b34801561065d57600080fd5b5061067161066c366004615227565b611501565b6040516103679291906152a1565b34801561068b57600080fd5b506106946115a6565b60405161036791906152c2565b3480156106ad57600080fd5b5060175461035b90600160a01b900460ff1681565b3480156106ce57600080fd5b506013546104c5906001600160a01b031681565b3480156106ee57600080fd5b50601154601254600f54601054604080519485526020850193909352918301526060820152608001610367565b34801561072757600080fd5b5061043e610736366004615311565b61160b565b34801561074757600080fd5b506016546104c5906001600160a01b031681565b34801561076757600080fd5b50600b5461063d9062ffffff1681565b34801561078357600080fd5b506018546104c5906001600160a01b031681565b3480156107a357600080fd5b506107b76107b23660046153ad565b611662565b604080518251151581526020808401516001600160781b031690820152918101516001600160801b031690820152606001610367565b6103d36107fb3660046153f4565b61171f565b34801561080c57600080fd5b50600b546301000000900462ffffff1661043e565b34801561082d57600080fd5b5061043e61083c366004615422565b611885565b34801561084d57600080fd5b5061043e611937565b34801561086257600080fd5b506103d3611941565b34801561087757600080fd5b506103d361088636600461559f565b611985565b34801561089757600080fd5b506103d36108a63660046151b0565b611a60565b3480156108b757600080fd5b506014546104c5906001600160a01b031681565b3480156108d757600080fd5b5061043e6108e63660046151f1565b611ada565b3480156108f757600080fd5b506103d361090636600461520e565b611af3565b34801561091757600080fd5b50610920611de8565b6040805162ffffff938416815292909116602083015201610367565b34801561094857600080fd5b5061035b6109573660046151f1565b611e59565b34801561096857600080fd5b5061043e611edc565b34801561097d57600080fd5b506109e161098c366004615657565b62ffffff16600090815260066020908152604080832054600783528184205460088452828520546009855283862054600a90955292909420546001600160781b03918216959482169492821693821692911690565b604080519586526020860194909452928401919091526060830152608082015260a001610367565b348015610a1557600080fd5b5060005461035b90600160a81b900460ff1681565b348015610a3657600080fd5b506019546104c5906001600160a01b031681565b348015610a5657600080fd5b506103d3611f4a565b348015610a6b57600080fd5b506103d3610a7a366004615674565b611fe5565b348015610a8b57600080fd5b50610a9f610a9a3660046151f1565b61214b565b60405161036791906156a2565b348015610ab857600080fd5b506103d3612243565b348015610acd57600080fd5b506015546104c5906001600160a01b031681565b348015610aed57600080fd5b50601a546104c5906001600160a01b031681565b348015610b0d57600080fd5b506103d3612309565b6060610b218261234d565b610b3783610b2d61239d565b62ffffff166123d4565b62ffffff168262ffffff161015610b875760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b60448201526064015b60405180910390fd5b610b9082612400565b610b9a8383612449565b90505b92915050565b610bab612b21565b6019805460ff60a81b1916600160a81b179055565b610bc8612b7b565b610bd0612bd4565b610bd8612c3c565b60005b84811015610c2457610c12868683818110610bf857610bf8615731565b9050602002016020810190610c0d91906151f1565b612c66565b80610c1c8161575d565b915050610bdb565b50610c2e8361234d565b60145460405163712441d960e11b815260009182916001600160a01b039091169063e24883b290610c679033908b908b90600401615776565b600060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cac9190810190615836565b915091506000610cba61239d565b9050610cca600080878785612c8c565b5060009050805b88811015610e0a5760008a8a83818110610ced57610ced615731565b9050602002016020810190610d0291906151f1565b90506000868381518110610d1857610d18615731565b602002602001015190506000610d3283838d896000612e3d565b6001600160781b03169050816001600160a01b0316836001600160a01b031614610d7a57610d6482838d896001612e3d565b610d77906001600160781b03168261587c565b90505b86811015610dca5760405162461bcd60e51b815260206004820152601860248201527f636c61696d656420616d6f756e7420746f6f20736d616c6c00000000000000006044820152606401610b7e565b610dd4818661587c565b9450610de0878261588f565b90508015610df457610df482826001613097565b5050508080610e029061575d565b915050610cd1565b5080600f6000828254610e1d919061587c565b90915550610e38905033610e318a866158a2565b6000613097565b50505050610e466001600355565b610e4e613198565b5050505050565b600054600160b01b900460ff1680610e775750600054600160a81b900460ff16155b15610fca57610e846131df565b601954600160a81b900460ff16158015610eaa5750600b54600160301b900462ffffff16155b8015610ec25750600b546301000000900462ffffff16155b610f025760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e697469616c20737461746560781b6044820152606401610b7e565b610f0a613217565b610f159060016158b9565b600b60066101000a81548162ffffff021916908362ffffff160217905550601560009054906101000a90046001600160a01b03166001600160a01b031663aec84ab66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa91906158dc565b600b60036101000a81548162ffffff021916908362ffffff160217905550565b610fd5600036613285565b565b601154601054600f546000918291610fef919061587c565b9050909192565b60006110006133d1565b905090565b61101a600080848461101561239d565b612c8c565b50505050565b600054600160b01b900460ff16806110425750600054600160a81b900460ff16155b156110da5761104f6131df565b601a546001600160a01b0316156110965760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610b7e565b6001600160a01b0381166110bc5760405162461bcd60e51b8152600401610b7e906158f9565b601a80546001600160a01b0319166001600160a01b03831617905550565b6110e5600036613285565b50565b6110f0612b21565b6019805460ff60a81b19169055565b60008054600160a81b900460ff1661112157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611000919061591f565b61119f33611e59565b6111db5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610b7e565b6001600160e01b03198116600090815260026020526040812080549091036112455760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b7e565b80544210156112965760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610b7e565b60008160010180546112a79061593c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d39061593c565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506113526001830182614f61565b50506000805460ff60b01b1916600160b01b1781556040513090611377908490615970565b6000604051808303816000865af19150503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161101a816133ee565b61141e612b21565b6001600160e01b0319811660009081526002602052604081205490036114865760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610b7e565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906114f26001830182614f61565b505050565b6000611000613217565b600260205260009081526040902080546001820180549192916115239061593c565b80601f016020809104026020016040519081016040528092919081815260200182805461154f9061593c565b801561159c5780601f106115715761010080835404028352916020019161159c565b820191906000526020600020905b81548152906001019060200180831161157f57829003601f168201915b5050505050905082565b6060601b60000180548060200260200160405190810160405280929190818152602001828054801561160157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115e3575b5050505050905090565b6000611615612b7b565b61161d612bd4565b611625612c3c565b33878761163383838361340b565b6116418a8a8a8a8a8a61349b565b93505050506116506001600355565b611658613198565b9695505050505050565b604080516060810182526000808252602080830182905282840182905262ffffff86168252600c905291822090918360048111156116a2576116a261500a565b60048111156116b3576116b361500a565b8152602080820192909252604090810160009081206001600160a01b038816825283528190208151606081018352905460ff81161515825261010081046001600160781b031693820193909352600160801b9092046001600160801b03169082015290505b9392505050565b611727613599565b61172f612bd4565b611737613217565b62ffffff168262ffffff1610156117905760405162461bcd60e51b815260206004820152601b60248201527f7265776172642065706f636820696420696e20746865207061737400000000006044820152606401610b7e565b611799346135f7565b62ffffff8316600090815260066020526040812080549091906117c69084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555034601160008282546117fc919061587c565b9091555050801561187957611810346135f7565b62ffffff83166000908152600760205260408120805490919061183d9084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055503460126000828254611873919061587c565b90915550505b611881613198565b5050565b600061188f612b7b565b611897612bd4565b61189f612c3c565b8787876118ad83838361340b565b6013546001600160a01b031633146119075760405162461bcd60e51b815260206004820152601e60248201527f6f6e6c79206674736f20726577617264206d616e616765722070726f787900006044820152606401610b7e565b6119158a8a8a8a8a8a61349b565b93505050506119246001600355565b61192c613198565b979650505050505050565b600061100061362f565b600054600160b01b900460ff16806119635750600054600160a81b900460ff16155b15610fca576119706131df565b6017805460ff60a01b1916600160a01b179055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146119fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610b7e565b611a56611a3283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b81525061364e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b611881828261370a565b600054600160b01b900460ff1680611a825750600054600160a81b900460ff16155b15611acf57611a8f6131df565b611881828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250601b939250506139869050565b611881600036613285565b6000611ae882610b2d61239d565b62ffffff1692915050565b6015546001600160a01b0316331480611b165750601a546001600160a01b031633145b611b525760405162461bcd60e51b815260206004820152600d60248201526c6f6e6c79206d616e616765727360981b6044820152606401610b7e565b600b546301000000900462ffffff168114611ba05760405162461bcd60e51b815260206004820152600e60248201526d1ddc9bdb99c8195c1bd8da081a5960921b6044820152606401610b7e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611bf55750600b54611bed90600160301b900462ffffff1660326158b9565b62ffffff1681105b15611c7557604051636b60edf760e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d6c1dbee90602401600060405180830381600087803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b505050505b611c88611c8382600161587c565b613999565b600b805462ffffff9290921663010000000265ffffff0000001990921691909117905560405181907f5d05c64f281304391697cf987812e1a736413a062a9bdf39af4102209eb6fa5890600090a26000818152600a60209081526040808320546009909252822054611d06916001600160781b03908116911661598c565b600083815260066020526040902054611d2891906001600160781b03166159ac565b90506001600160781b0381161561188157806001600160781b031660106000828254611d54919061587c565b90915550506000828152600a602052604081208054839290611d809084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061dead6001600160a01b03166108fc826001600160781b03169081150290604051600060405180830381858888f193505050501580156114f2573d6000803e3d6000fd5b600080611df361239d565b9150611dfe826139c9565b611e4a5760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f6368207769746820636c61696d61626c652072657761726473006044820152606401610b7e565b611e5382613a47565b90509091565b60008054600160a01b900460ff168015610b9d5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9d91906159cc565b6018546040805163deea13e760e01b815290516000926001600160a01b03169163deea13e79160048083019260209291908290030181865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100091906159e9565b611f52612b21565b600b5462ffffff90811614611f9b5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610b7e565b611fa3613217565b600b805462ffffff191662ffffff9290921691821790556040517f1cfb844c44f9325fc9ad6cc6191a4a24b0415137fe300b6c9071523a253f7a0890600090a2565b600054600160a01b900460ff16156120365760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610b7e565b6001600160a01b03821661208c5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610b7e565b6001600160a01b0381166120d55760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610b7e565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6060600061215b83610b2d61239d565b9050612166816139c9565b1561223d57600061217682613a47565b90506121828282615a02565b61218d9060016158b9565b62ffffff166001600160401b038111156121a9576121a96154c2565b6040519080825280602002602001820160405280156121dc57816020015b60608152602001906001900390816121c75790505b509250815b8162ffffff168162ffffff161161223a576121fc8582612449565b846122078584615a02565b62ffffff168151811061221c5761221c615731565b6020026020010181905250808061223290615a1e565b9150506121e1565b50505b50919050565b61224b612b21565b600054600160a81b900460ff16156122a55760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610b7e565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061232b5750600054600160a81b900460ff16155b15610fca576123386131df565b6019805460ff60a01b1916600160a01b179055565b612355613217565b62ffffff168162ffffff16106110e55760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420636c61696d61626c6560981b6044820152606401610b7e565b600b5460009061100090611c839062ffffff166123cf6123bb6133d1565b600b546301000000900462ffffff16613aa1565b613aa1565b6001600160a01b038216600090815260046020526040812054610b9a90611c839062ffffff1684613aa1565b612409816139c9565b6110e55760405162461bcd60e51b8152602060048201526011602482015270726577617264732068617368207a65726f60781b6044820152606401610b7e565b60155460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526060916000916001600160a01b039091169063c581e79190604401602060405180830381865afa1580156124c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e691906159e9565b905060006124f384613ab7565b9050600061253f60405180610100016040528060608152602001606081526020016060815260200160608152602001600081526020016060815260200160608152602001600081525090565b6017546001600160a01b0316156125dd576017546040516325f48f9960e11b81526001600160a01b0390911690634be91f3290612582908a908790600401615a40565b600060405180830381865afa15801561259f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125c79190810190615aca565b6020830152808252516125da908361587c565b91505b6019546001600160a01b03161561267f576019546040516325f48f9960e11b81526001600160a01b0390911690634be91f3290612620908a908790600401615a40565b600060405180830381865afa15801561263d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126659190810190615b84565b6060830152604082018190525161267c908361587c565b91505b60185460405163277166bf60e11b81526001600160a01b0390911690634ee2cd7e906126b1908a908790600401615a40565b602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f291906159e9565b60808201819052156128785760185460405163ed475a7960e01b81526001600160a01b039091169063ed475a7990612730908a908790600401615a40565b600060405180830381865afa15801561274d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127759190810190615bd0565b505060c083015260a082018190525161278e908361587c565b91506000805b8260c00151518110156127de578260c0015181815181106127b7576127b7615731565b6020026020010151826127ca919061587c565b9150806127d68161575d565b915050612794565b5061271081101561287657601854604051634181ad4160e11b81526001600160a01b03909116906383035a829061281b908b908890600401615a40565b602060405180830381865afa158015612838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285c91906159e9565b60e08301819052156128765761287360018461587c565b92505b505b62ffffff86166000908152600e6020526040902054841115826001600160401b038111156128a8576128a86154c2565b60405190808252806020026020018201604052801561290157816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816128c65790505b5095506000808360e00151111561294d576129248860028b8660e0015186613b56565b878261292f8161575d565b93508151811061294157612941615731565b60200260200101819052505b60005b8360a00151518110156129fa576129bf8960028660a00151848151811061297957612979615731565b60200260200101516129b98860c00151868151811061299a5761299a615731565b60200260200101516127108a60800151613c619092919063ffffffff16565b87613b56565b88836129ca8161575d565b9450815181106129dc576129dc615731565b602002602001018190525080806129f29061575d565b915050612950565b5060005b835151811015612a8e57612a5389600386600001518481518110612a2457612a24615731565b602002602001015160601c87602001518581518110612a4557612a45615731565b602002602001015187613b56565b8883612a5e8161575d565b945081518110612a7057612a70615731565b60200260200101819052508080612a869061575d565b9150506129fe565b5060005b836040015151811015612b1457612ad989600486604001518481518110612abb57612abb615731565b602002602001015187606001518581518110612a4557612a45615731565b8883612ae48161575d565b945081518110612af657612af6615731565b60200260200101819052508080612b0c9061575d565b915050612a92565b5050505050505092915050565b612b296110ff565b6001600160a01b0316336001600160a01b031614610fd55760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610b7e565b601954600160a81b900460ff16610fd55760405162461bcd60e51b815260206004820152601a60248201527f726577617264206d616e616765722064656163746976617465640000000000006044820152606401610b7e565b600034612bdf61362f565b612be9919061587c565b90504781811115612c2c5761dead6108fc612c04848461588f565b6040518115909202916000818181858888f193505050501580156114f2573d6000803e3d6000fd5b8181101561188157611881615c43565b600260035403612c5f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b6001600160a01b0381166110e55760405162461bcd60e51b8152600401610b7e906158f9565b60008060005b84811015612e32578362ffffff16868683818110612cb257612cb2615731565b9050602002810190612cc49190615c59565b612cd5906040810190602001615657565b62ffffff161015612d1f5760405162461bcd60e51b81526020600482015260146024820152731c995dd85c9908195c1bd8da08195e1c1a5c995960621b6044820152606401610b7e565b6000868683818110612d3357612d33615731565b9050602002810190612d459190615c59565b612d569060a0810190608001615c6f565b90506000816004811115612d6c57612d6c61500a565b1480612d8957506001816004811115612d8757612d8761500a565b145b15612df3576001600160a01b03891615612dee57600080612dce8b8b8b8b88818110612db757612db7615731565b9050602002810190612dc99190615c59565b613d87565b9092509050612ddd828761598c565b9550612de9818661598c565b945050505b612e1f565b612e1f878784818110612e0857612e08615731565b9050602002810190612e1a9190615c59565b614169565b5080612e2a8161575d565b915050612c92565b509550959350505050565b600080612e4f878562ffffff166123d4565b9050805b8562ffffff168162ffffff161161301f5760155460405163c581e79160e01b815262ffffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526000916001600160a01b03169063c581e79190604401602060405180830381865afa158015612ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efc91906159e9565b905080600003612f0f57612f0f82612400565b62ffffff82166000908152600e602052604081205482111590612f3184613ab7565b90506000612f428c8c878587614322565b612f4c908261598c565b905087612fa9576017546001600160a01b031615612f7e57612f718c8c878587614590565b612f7b908261598c565b90505b6019546001600160a01b031615612fa957612f9c8c8c87858761468b565b612fa6908261598c565b90505b62ffffff851660009081526009602052604081208054839290612fd69084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055508087613006919061598c565b965050505050808061301790615a1e565b915050612e53565b5061302b8560016158b9565b6001600160a01b03881660009081526004602052604090205462ffffff9182169116101561308d5761305e8560016158b9565b6001600160a01b0388166000908152600460205260409020805462ffffff191662ffffff929092169190911790555b5095945050505050565b80156131035760185460405163b760faf960e01b81526001600160a01b0385811660048301529091169063b760faf99084906024016000604051808303818588803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505050505050565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114613150576040519150601f19603f3d011682016040523d82523d6000602084013e613155565b606091505b505090508061101a5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b7e565b6131a061362f565b4714610fd55760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610b7e565b600054600160b01b900460ff161561320f5733301461320057613200615c43565b6000805460ff60b01b19169055565b610fd5612b21565b60155460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100091906158dc565b61328d612b21565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156132d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fd91906159e9565b9050600061330b824261587c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906133899082615cd8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516133c29493929190615d97565b60405180910390a15050505050565b600b54600090610b9d90600160301b900462ffffff166001614769565b3d604051818101604052816000823e8215613407578181f35b8181fd5b816001600160a01b0316836001600160a01b03160361342957505050565b60145460405163ce2caa5760e01b81526001600160a01b038581166004830152848116602483015283811660448301529091169063ce2caa579060640160006040518083038186803b15801561347e57600080fd5b505afa158015613492573d6000803e3d6000fd5b50505050505050565b60006134a686612c66565b6134af8561234d565b60006134b961239d565b905060006134ca8989878786612c8c565b6001600160781b03909116935090506134e7898989856000612e3d565b6134fa906001600160781b03168461587c565b92506001600160781b0381161561356457806001600160781b031660106000828254613526919061587c565b909155505060405161dead906001600160781b03831680156108fc02916000818181858888f19350505050158015613562573d6000803e3d6000fd5b505b821561358d5782600f600082825461357c919061587c565b9091555061358d9050888488613097565b50509695505050505050565b336000908152601c60205260408120549003610fd55760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920726577617264206f6666657273206d616e616765720000000000006044820152606401610b7e565b60006001600160781b0382111561362b576040516306dfcc6560e41b81526078600482015260248101839052604401610b7e565b5090565b6000601054600f54601154613644919061588f565b611000919061588f565b600080826040516020016136629190615ddd565b6040516020818303038152906040528051906020012090506000805b86518110156136da5786818151811061369957613699615731565b602002602001015183036136c8578581815181106136b9576136b9615731565b602002602001015191506136da565b806136d28161575d565b91505061367e565b506001600160a01b0381166137015760405162461bcd60e51b8152600401610b7e906158f9565b95945050505050565b61373e82826040518060400160405280601181526020017021b630b4b6a9b2ba3ab826b0b730b3b2b960791b81525061364e565b601460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061379a828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b81525061364e565b601560006101000a8154816001600160a01b0302191690836001600160a01b031602179055506137f9828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b81525061364e565b601680546001600160a01b0319166001600160a01b0392909216919091179055601754600160a01b900460ff16156138805761385f8282604051806040016040528060118152602001702821b430b4b729ba30b5b2a6b4b93937b960791b81525061364e565b601780546001600160a01b0319166001600160a01b03929092169190911790555b601954600160a01b900460ff16156138e1576138c082826040518060400160405280600b81526020016a43436861696e5374616b6560a81b81525061364e565b601980546001600160a01b0319166001600160a01b03929092169190911790555b61390882826040518060400160405280600481526020016315d3985d60e21b81525061364e565b601860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613962828260405180604001604052806011815260200170233a39b7a932bbb0b93226b0b730b3b2b960791b81525061364e565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b61398f8261478f565b611881828261481a565b600062ffffff82111561362b576040516306dfcc6560e41b81526018600482015260248101839052604401610b7e565b601554604051633238037160e11b815262ffffff8316600482015260009182916001600160a01b039091169063647006e290602401602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f91906159e9565b141592915050565b600080613a52613217565b62ffffff169050613a648360016158b9565b91505b808262ffffff16108015613a7f5750613a7f826139c9565b15613a965781613a8e81615a1e565b925050613a67565b611718600183615a02565b6000818311613ab05781610b9a565b5090919050565b62ffffff811660009081526005602052604081205490819003613b5157601554604051636131910b60e11b815262ffffff841660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015613b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b459190615df0565b6001600160401b031690505b919050565b6040805160a08101825260009181018290526060808201838152608083019390935262ffffff8816825285901b6001600160601b031916602082015290856004811115613ba557613ba561500a565b90816004811115613bb857613bb861500a565b90525062ffffff86166000908152600c6020526040812081876004811115613be257613be261500a565b6004811115613bf357613bf361500a565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002090508280613c335750805460ff165b158015608084015261308d57613c49818561485b565b6001600160781b031660408301525095945050505050565b6000808211613ca55760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610b7e565b83600003613cb557506000611718565b83830283858281613cc857613cc8615e19565b0403613ce657828181613cdd57613cdd615e19565b04915050611718565b506000613cf38386615e2f565b90506000613d018487615e43565b90506000613d0f8587615e2f565b90506000613d1d8688615e43565b905085613d2a82856158a2565b613d349190615e2f565b613d3e83856158a2565b613d4883876158a2565b88613d5386896158a2565b613d5d91906158a2565b613d67919061587c565b613d71919061587c565b613d7b919061587c565b98975050505050505050565b600080602083016001600160a01b038616613da86060860160408701615e57565b60601c14613dec5760405162461bcd60e51b815260206004820152601160248201527077726f6e672062656e656669636961727960781b6044820152606401610b7e565b600081604051602001613dff9190615e8b565b60408051601f1981840301815291905280516020918201209150600d90600090613e2b90850185615657565b62ffffff1681526020808201929092526040908101600090812084825290925290205460ff1661415f57613e5f85826148d7565b613e84613e6f6020840184615657565b613e7f6060850160408601615ef1565b6149bc565b93506001613e986080840160608501615c6f565b6004811115613ea957613ea961500a565b03614047576016546000906001600160a01b0316639350f57c613ecf6020860186615657565b6040516001600160e01b031960e084901b16815262ffffff90911660048201526001600160a01b038b166024820152604401602060405180830381865afa158015613f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4291906159e9565b9050801561404557613f7b613f76613f676001600160781b03881684620f4240613c61565b876001600160781b0316614a75565b6135f7565b9350613f8784866159ac565b945083600a6000613f9b6020870187615657565b62ffffff168152602081019190915260400160009081208054909190613fcb9084906001600160781b031661598c565b82546001600160781b039182166101009390930a92830291909202199091161790555061dead6001600160a01b038916807f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d261402a6020880188615657565b60018960405161403c93929190615f0c565b60405180910390a45b505b83600960006140596020860186615657565b62ffffff1681526020810191909152604001600090812080549091906140899084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506001600d60008460000160208101906140c69190615657565b62ffffff16815260208082019290925260409081016000908120858252835220805460ff1916921515929092179091556001600160a01b03878116919089169081907f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d29061413690870187615657565b6141466080880160608901615c6f565b8960405161415693929190615f0c565b60405180910390a45b5050935093915050565b602081016000600c8161417f6040860185615657565b62ffffff16815260200190815260200160002060008360600160208101906141a79190615c6f565b60048111156141b8576141b861500a565b60048111156141c9576141c961500a565b815260200190815260200160002060008360200160208101906141ec9190615e57565b60601c81526020810191909152604001600020805490915060ff166114f25760008260405160200161421e9190615e8b565b60405160208183030381529060405280519060200120905061424084826148d7565b815460ff1916600117825561426b61425b6020850185615657565b613e7f6060860160408701615ef1565b82546001600160781b0391909116610100026fffffffffffffffffffffffffffffff00199091161782556142ca6142a56020850185615657565b6142b56040860160208701615e57565b6142c56080870160608801615c6f565b614a84565b82546001600160801b03918216600160801b0291161782556001600e60006142f56020870187615657565b62ffffff1681526020019081526020016000206000828254614317919061587c565b909155505050505050565b60185460405163277166bf60e11b815260009182916001600160a01b0390911690634ee2cd7e90614359908a908890600401615a40565b602060405180830381865afa158015614376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439a91906159e9565b9050801561308d5760185460405163ed475a7960e01b8152600091829182916001600160a01b03169063ed475a79906143d9908d908b90600401615a40565b600060405180830381865afa1580156143f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261441e9190810190615bd0565b505081519193509150156144de5760005b82518110156144dc57600061446a83838151811061444f5761444f615731565b602002602001015161271088613c619092919063ffffffff16565b905082828151811061447e5761447e615731565b602002602001015185614491919061587c565b94506144bc8483815181106144a8576144a8615731565b60200260200101518d8d8d6002868e614c6b565b6144c6908861598c565b96505080806144d49061575d565b91505061442f565b505b61271083101561458357601854604051634181ad4160e11b81526000916001600160a01b0316906383035a829061451b908e908c90600401615a40565b602060405180830381865afa158015614538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061455c91906159e9565b90508015614581576145748b8c8c8c6002868d614c6b565b61457e908761598c565b95505b505b5050505095945050505050565b6017546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f32906145c7908b908990600401615a40565b600060405180830381865afa1580156145e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261460c9190810190615aca565b9150915060005b825181101561467f5761466183828151811061463157614631615731565b602002602001015160601c8a8a8a600387878151811061465357614653615731565b60200260200101518b614c6b565b61466b908561598c565b9350806146778161575d565b915050614613565b50505095945050505050565b6019546040516325f48f9960e11b8152600091829182916001600160a01b031690634be91f32906146c2908b908990600401615a40565b600060405180830381865afa1580156146df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147079190810190615b84565b9150915060005b825181101561467f5761474b83828151811061472c5761472c615731565b60200260200101518a8a8a600487878151811061465357614653615731565b614755908561598c565b9350806147618161575d565b91505061470e565b6000808383111561477f57506000905080614788565b50600190508183035b9250929050565b8054156110e557805460018083019160009184916147ad919061588f565b815481106147bd576147bd615731565b60009182526020808320909101546001600160a01b0316835282019290925260400181205580548190806147f3576147f3615f3c565b600082815260209020810160001990810180546001600160a01b031916905501905561478f565b60005b81518110156114f2576148498383838151811061483c5761483c615731565b6020026020010151614e32565b806148538161575d565b91505061481d565b60008160000361486d57506000610b9d565b825461010090046001600160781b03166000819003614890576000915050610b9d565b8354600160801b90046001600160801b03168084036148b157509050610b9d565b8084106148c0576148c0615c43565b613701613f766001600160781b0384168684613c61565b6015546000906001600160a01b031663647006e26148fb6040860160208701615657565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa15801561493b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495f91906159e9565b905061497981836149708680615f52565b90929091614e9a565b6114f25760405162461bcd60e51b81526020600482015260146024820152731b595c9adb19481c1c9bdbd9881a5b9d985b1a5960621b6044820152606401610b7e565b62ffffff821660009081526006602090815260408083205460089092529091205482916001600160781b0390811691166149f6838261598c565b6001600160781b0316826001600160781b03161015614a1c57614a1981836159ac565b92505b62ffffff851660009081526008602052604081208054859290614a499084906001600160781b031661598c565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550505092915050565b6000818310613ab05781610b9a565b62ffffff8316600090815260056020526040812054808203614b3857601554604051636131910b60e11b815262ffffff871660048201526001600160a01b039091169063c263221690602401602060405180830381865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190615df0565b62ffffff861660009081526005602052604090206001600160401b03919091169081905590505b6002836004811115614b4c57614b4c61500a565b03614bd757601854604051631257fcdb60e31b8152614bcf916001600160a01b0316906392bfe6d890614b8990606089901c908690600401615a40565b602060405180830381865afa158015614ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bca91906159e9565b614eb2565b915050611718565b6003836004811115614beb57614beb61500a565b03614c3357601754604051631190c4dd60e21b81526001600160601b03198616600482015260248101839052614bcf916001600160a01b031690634643137490604401614b89565b601954604051631257fcdb60e31b8152614bcf916001600160a01b0316906392bfe6d890614b8990606089901c908690600401615a40565b62ffffff84166000908152600c60205260408120819081866004811115614c9457614c9461500a565b6004811115614ca557614ca561500a565b815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002090508280614ce55750805460ff165b614d235760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b9a5d1a585b1a5cd959608a1b6044820152606401610b7e565b614d2d818561485b565b91506001600160781b03821615614dcd57614d4784614eb2565b81548290601090614d69908490600160801b90046001600160801b0316615f9b565b82546001600160801b0391821661010093840a908102920219161790915582548492508391600191614da89185916001600160781b03919004166159ac565b92506101000a8154816001600160781b0302191690836001600160781b031602179055505b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f06f77960d1401cc7d724b5c2b5ad672b9dbf08d8b11516a38c21697c23fbb0d2898987604051614e1e93929190615f0c565b60405180910390a450979650505050505050565b6001600160a01b038116600090815260018301602052604090205415614e56575050565b8154600181810184556000848152602080822090930180546001600160a01b039095166001600160a01b031990951685179055845493815293019052604090912055565b600082614ea8868685614ee6565b1495945050505050565b60006001600160801b0382111561362b576040516306dfcc6560e41b81526080600482015260248101839052604401610b7e565b600081815b84811015614f2957614f1582878784818110614f0957614f09615731565b90506020020135614f32565b915080614f218161575d565b915050614eeb565b50949350505050565b6000818310614f4e576000828152602084905260409020610b9a565b6000838152602083905260409020610b9a565b508054614f6d9061593c565b6000825580601f10614f7d575050565b601f0160209004906000526020600020908101906110e591905b8082111561362b5760008155600101614f97565b6001600160a01b03811681146110e557600080fd5b62ffffff811681146110e557600080fd5b60008060408385031215614fe457600080fd5b8235614fef81614fab565b91506020830135614fff81614fc0565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6005811061503e57634e487b7160e01b600052602160045260246000fd5b9052565b62ffffff81511682526bffffffffffffffffffffffff1960208201511660208301526001600160781b0360408201511660408301526000606082015161508b6060850182615020565b505060809081015115159082015260a00190565b6020808252825182820181905260009190848201906040850190845b818110156150dc576150ce838551615042565b9385019392506001016150bb565b50909695505050505050565b60008083601f8401126150fa57600080fd5b5081356001600160401b0381111561511157600080fd5b6020830191508360208260051b850101111561478857600080fd5b60008060008060006060868803121561514457600080fd5b85356001600160401b038082111561515b57600080fd5b61516789838a016150e8565b90975095506020880135915061517c82614fc0565b9093506040870135908082111561519257600080fd5b5061519f888289016150e8565b969995985093965092949392505050565b600080602083850312156151c357600080fd5b82356001600160401b038111156151d957600080fd5b6151e5858286016150e8565b90969095509350505050565b60006020828403121561520357600080fd5b813561171881614fab565b60006020828403121561522057600080fd5b5035919050565b60006020828403121561523957600080fd5b81356001600160e01b03198116811461171857600080fd5b60005b8381101561526c578181015183820152602001615254565b50506000910152565b6000815180845261528d816020860160208601615251565b601f01601f19169290920160200192915050565b8281526040602082015260006152ba6040830184615275565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156150dc5783516001600160a01b0316835292840192918401916001016152de565b80151581146110e557600080fd5b60008060008060008060a0878903121561532a57600080fd5b863561533581614fab565b9550602087013561534581614fab565b9450604087013561535581614fc0565b9350606087013561536581615303565b925060808701356001600160401b0381111561538057600080fd5b61538c89828a016150e8565b979a9699509497509295939492505050565b803560058110613b5157600080fd5b6000806000606084860312156153c257600080fd5b83356153cd81614fab565b925060208401356153dd81614fc0565b91506153eb6040850161539e565b90509250925092565b6000806040838503121561540757600080fd5b823561541281614fc0565b91506020830135614fff81615303565b600080600080600080600060c0888a03121561543d57600080fd5b873561544881614fab565b9650602088013561545881614fab565b9550604088013561546881614fab565b9450606088013561547881614fc0565b9350608088013561548881615303565b925060a08801356001600160401b038111156154a357600080fd5b6154af8a828b016150e8565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615500576155006154c2565b604052919050565b60006001600160401b03821115615521576155216154c2565b5060051b60200190565b600082601f83011261553c57600080fd5b8135602061555161554c83615508565b6154d8565b82815260059290921b8401810191818101908684111561557057600080fd5b8286015b8481101561559457803561558781614fab565b8352918301918301615574565b509695505050505050565b600080604083850312156155b257600080fd5b82356001600160401b03808211156155c957600080fd5b818501915085601f8301126155dd57600080fd5b813560206155ed61554c83615508565b82815260059290921b8401810191818101908984111561560c57600080fd5b948201945b8386101561562a57853582529482019490820190615611565b9650508601359250508082111561564057600080fd5b5061564d8582860161552b565b9150509250929050565b60006020828403121561566957600080fd5b813561171881614fc0565b6000806040838503121561568757600080fd5b823561569281614fab565b91506020830135614fff81614fab565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561572357888603603f19018552825180518088529088019088880190845b8181101561570d576156ff838551615042565b938b019392506001016156ec565b50909750505093860193918601916001016156ca565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161576f5761576f615747565b5060010190565b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b878110156157c55784356157b181614fab565b84168252938201939082019060010161579e565b5098975050505050505050565b600082601f8301126157e357600080fd5b815160206157f361554c83615508565b82815260059290921b8401810191818101908684111561581257600080fd5b8286015b8481101561559457805161582981614fab565b8352918301918301615816565b6000806040838503121561584957600080fd5b82516001600160401b0381111561585f57600080fd5b61586b858286016157d2565b925050602083015190509250929050565b80820180821115610b9d57610b9d615747565b81810381811115610b9d57610b9d615747565b8082028115828204841417610b9d57610b9d615747565b62ffffff8181168382160190808211156158d5576158d5615747565b5092915050565b6000602082840312156158ee57600080fd5b815161171881614fc0565b6020808252600c908201526b61646472657373207a65726f60a01b604082015260600190565b60006020828403121561593157600080fd5b815161171881614fab565b600181811c9082168061595057607f821691505b60208210810361223d57634e487b7160e01b600052602260045260246000fd5b60008251615982818460208701615251565b9190910192915050565b6001600160781b038181168382160190808211156158d5576158d5615747565b6001600160781b038281168282160390808211156158d5576158d5615747565b6000602082840312156159de57600080fd5b815161171881615303565b6000602082840312156159fb57600080fd5b5051919050565b62ffffff8281168282160390808211156158d5576158d5615747565b600062ffffff808316818103615a3657615a36615747565b6001019392505050565b6001600160a01b03929092168252602082015260400190565b6001600160601b0319811681146110e557600080fd5b600082601f830112615a8057600080fd5b81516020615a9061554c83615508565b82815260059290921b84018101918181019086841115615aaf57600080fd5b8286015b848110156155945780518352918301918301615ab3565b60008060408385031215615add57600080fd5b82516001600160401b0380821115615af457600080fd5b818501915085601f830112615b0857600080fd5b81516020615b1861554c83615508565b82815260059290921b84018101918181019089841115615b3757600080fd5b948201945b83861015615b5e578551615b4f81615a59565b82529482019490820190615b3c565b91880151919650909350505080821115615b7757600080fd5b5061564d85828601615a6f565b60008060408385031215615b9757600080fd5b82516001600160401b0380821115615bae57600080fd5b615bba868387016157d2565b93506020850151915080821115615b7757600080fd5b60008060008060808587031215615be657600080fd5b84516001600160401b0380821115615bfd57600080fd5b615c09888389016157d2565b95506020870151915080821115615c1f57600080fd5b50615c2c87828801615a6f565b604087015160609097015195989097509350505050565b634e487b7160e01b600052600160045260246000fd5b60008235609e1983360301811261598257600080fd5b600060208284031215615c8157600080fd5b610b9a8261539e565b601f8211156114f257600081815260208120601f850160051c81016020861015615cb15750805b601f850160051c820191505b81811015615cd057828155600101615cbd565b505050505050565b81516001600160401b03811115615cf157615cf16154c2565b615d0581615cff845461593c565b84615c8a565b602080601f831160018114615d3a5760008415615d225750858301515b600019600386901b1c1916600185901b178555615cd0565b600085815260208120601f198616915b82811015615d6957888601518255948401946001909101908401615d4a565b5085821015615d875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b602081526000610b9a6020830184615275565b600060208284031215615e0257600080fd5b81516001600160401b038116811461171857600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615e3e57615e3e615e19565b500490565b600082615e5257615e52615e19565b500690565b600060208284031215615e6957600080fd5b813561171881615a59565b80356001600160781b0381168114613b5157600080fd5b608081018235615e9a81614fc0565b62ffffff1682526020830135615eaf81615a59565b6001600160601b03191660208301526001600160781b03615ed260408501615e74565b166040830152615ee46060840161539e565b6158d56060840182615020565b600060208284031215615f0357600080fd5b610b9a82615e74565b62ffffff8416815260608101615f256020830185615020565b6001600160781b0383166040830152949350505050565b634e487b7160e01b600052603160045260246000fd5b6000808335601e19843603018112615f6957600080fd5b8301803591506001600160401b03821115615f8357600080fd5b6020019150600581901b360382131561478857600080fd5b6001600160801b038281168282160390808211156158d5576158d561574756fea26469706673582212209f7fce371d19012bd087d044ab7ec79ea86d70327322d541ae3849479f03d85f64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abi/VoterRegistry.json b/abi/VoterRegistry.json index 79b23e99..3be8b52f 100644 --- a/abi/VoterRegistry.json +++ b/abi/VoterRegistry.json @@ -30,15 +30,25 @@ "name": "_initialRewardEpochId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "_initialNewSigningPolicyInitializationStartBlockNumber", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "_initialNormalisedWeightsSumOfVotersWithPublicKeys", + "type": "uint16" + }, { "internalType": "address[]", "name": "_initialVoters", "type": "address[]" }, { - "internalType": "uint16[]", - "name": "_initialNormalisedWeights", - "type": "uint16[]" + "internalType": "uint256[]", + "name": "_initialRegistrationWeights", + "type": "uint256[]" } ], "stateMutability": "nonpayable", @@ -1061,8 +1071,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620047c4380380620047c4833981016040819052620000349162000554565b848787620000438282620002d2565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5061ffff841115620000c85760405162461bcd60e51b815260206004820152601360248201527f5f6d6178566f7465727320746f6f20686967680000000000000000000000000060448201526064015b60405180910390fd5b600384905581518015801590620000df5750848111155b6200012d5760405162461bcd60e51b815260206004820152601d60248201527f5f696e697469616c566f74657273206c656e67746820696e76616c69640000006044820152606401620000bf565b815181146200017f5760405162461bcd60e51b815260206004820152601a60248201527f6172726179206c656e6774687320646f206e6f74206d617463680000000000006044820152606401620000bf565b600084815260056020526040812090805b83811015620002985782600001868281518110620001b257620001b26200067c565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b0390921691909117905584518590829081106200020457620002046200067c565b602002602001015161ffff168360010160008884815181106200022b576200022b6200067c565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508481815181106200026c576200026c6200067c565b602002602001015182620002819190620006a8565b9150806200028f81620006cd565b91505062000190565b5060029091018054600160801b61ffff9093169283026001600160901b031990911690921791909117905550620006e99650505050505050565b600054600160a01b900460ff16156200032e5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620003865760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b038116620003d15760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200045d57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620004a157620004a162000460565b604052919050565b60006001600160401b03821115620004c557620004c562000460565b5060051b60200190565b600082601f830112620004e157600080fd5b81516020620004fa620004f483620004a9565b62000476565b82815260059290921b840181019181810190868411156200051a57600080fd5b8286015b848110156200054957805161ffff811681146200053b5760008081fd5b83529183019183016200051e565b509695505050505050565b600080600080600080600060e0888a0312156200057057600080fd5b87516200057d8162000447565b80975050602080890151620005928162000447565b60408a0151909750620005a58162000447565b60608a015160808b015160a08c015192985090965094506001600160401b0380821115620005d257600080fd5b818b0191508b601f830112620005e757600080fd5b8151620005f8620004f482620004a9565b81815260059190911b8301840190848101908e8311156200061857600080fd5b938501935b8285101562000643578451620006338162000447565b825293850193908501906200061d565b60c08e015190975094505050808311156200065d57600080fd5b50506200066d8a828b01620004cf565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115620006c657620006c662000692565b5092915050565b600060018201620006e257620006e262000692565b5060010190565b6140cb80620006f96000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806374e6310e11610151578063b9111169116100c3578063e17f212e11610087578063e17f212e1461069a578063ef88bf13146106ae578063f5a98383146106c1578063faae7fc9146106c9578063fd587daf146106dc578063fff50753146106ef57600080fd5b8063b911116914610628578063c452e47f14610649578063cc8356ca1461066b578063d5e50a631461067e578063debfda301461068757600080fd5b806392e3e45f1161011557806392e3e45f1461057e5780639508858e14610592578063987a4500146105cf578063aeacaa6f146105ef578063b00c0b7614610602578063b61b57fa1461061557600080fd5b806374e6310e146104ef5780637c2cb921146105105780638c645728146105235780638e467784146105585780638f7d09571461056b57600080fd5b806344b571d9116101ea5780635267a15d116101ae5780635267a15d146104615780635aa6e675146104885780635ff270791461049057806362354e03146104a357806367fc4029146104b65780636ddcd4bc146104c957600080fd5b806344b571d9146103a0578063457c2e47146103dd5780634f5a9968146103f057806350b1d61b1461043b578063521318231461044e57600080fd5b80633399408111610231578063339940811461030b578063369e94341461032c57806339661f5f1461034c5780633c5cb76f1461036d578063448436b11461038d57600080fd5b806317da6b311461026e57806318d1812d1461028357806328be8e3a1461029657806329a2e5ed146102c05780632cc2c0f6146102e0575b600080fd5b61028161027c3660046132a0565b61070f565b005b6102816102913660046132d2565b610766565b6102a96102a43660046132ef565b6107ef565b6040516102b792919061334c565b60405180910390f35b6102d36102ce3660046132ef565b610926565b6040516102b791906133a3565b600a546102f3906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b61031e6103193660046133b6565b6109f4565b6040519081526020016102b7565b61031e61033a3660046132ef565b60009081526005602052604090205490565b61035f61035a3660046132ef565b610a37565b6040516102b7929190613412565b61031e61037b36600461344d565b60046020526000908152604090205481565b61028161039b3660046132d2565b610b0a565b6103b36103ae36600461346a565b610b57565b60408051948552602085019390935261ffff918216928401929092521660608201526080016102b7565b6102d36103eb3660046132ef565b610d0e565b61042b6103fe3660046133b6565b60009081526005602090815260408083206001600160a01b03949094168352600190930190522054151590565b60405190151581526020016102b7565b6008546102f3906001600160a01b031681565b61028161045c3660046132ef565b610d7a565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102f3565b6102f3610dff565b61028161049e36600461349a565b610e9b565b6000546102f3906001600160a01b031681565b6102816104c436600461349a565b611121565b6104dc6104d73660046133b6565b6111fd565b60405161ffff90911681526020016102b7565b6105026104fd36600461349a565b61128f565b6040516102b7929190613514565b6102d361051e3660046132ef565b611334565b61053661053136600461346a565b6113b7565b604080516001600160a01b03909316835261ffff9091166020830152016102b7565b6009546102f3906001600160a01b031681565b610281610579366004613535565b6114d6565b600a5461042b90600160a01b900460ff1681565b6105a56105a03660046132ef565b6115e2565b604080516001600160801b03909416845261ffff92831660208501529116908201526060016102b7565b6105e26105dd3660046132ef565b61163b565b6040516102b79190613576565b61031e6105fd36600461360a565b61175e565b610281610610366004613761565b611906565b6102d36106233660046132ef565b6119e5565b61063b6106363660046132ef565b611a68565b6040516102b792919061384d565b61065c6106573660046132ef565b611bec565b6040516102b793929190613872565b6102d36106793660046132ef565b6120cd565b61031e60035481565b61042b6106953660046132d2565b6121ab565b60005461042b90600160a81b900460ff1681565b6102816106bc3660046138ac565b61222e565b610281612394565b6007546102f3906001600160a01b031681565b6102816106ea3660046132ef565b61245a565b61031e6106fd3660046132ef565b60066020526000908152604090205481565b600054600160b01b900460ff16806107315750600054600160a81b900460ff16155b156107585761073e612595565b600a805460ff60a01b1916600160a01b8315150217905550565b6107636000366125cf565b50565b600a546001600160a01b031633146107cf5760405162461bcd60e51b815260206004820152602160248201527f6f6e6c792073797374656d20726567697374726174696f6e20636f6e747261636044820152601d60fa1b60648201526084015b60405180910390fd5b6000806107db8361271b565b915091506107ea83838361289d565b505050565b600081815260056020908152604091829020805483518184028101840190945280845260609384939091839183018282801561085457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610836575b5050835193965083925050506001600160401b0381111561087757610877613684565b6040519080825280602002602001820160405280156108a0578160200160208202803683370190505b50925060005b8181101561091e578260010160008683815181106108c6576108c66138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610901576109016138da565b60209081029190910101528061091681613906565b9150506108a6565b505050915091565b6000818152600560205260409020600201546060906001600160801b03166109605760405162461bcd60e51b81526004016107c69061391f565b60085460008381526005602090815260408083206006909252918290205491516369fe610d60e01b81526001600160a01b03909316926369fe610d926109a99291600401613994565b600060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee91908101906139b6565b92915050565b60008181526005602090815260408083206001600160a01b0386168452600101909152902054806109ee5760405162461bcd60e51b81526004016107c690613a4f565b60008181526005602052604090206002015460609081906001600160801b0316610a735760405162461bcd60e51b81526004016107c69061391f565b600854600084815260056020908152604080832060069092529182902054915163bda9a28b60e01b81526001600160a01b039093169263bda9a28b92610abc9291600401613994565b600060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b019190810190613ad8565b91509150915091565b600054600160b01b900460ff1680610b2c5750600054600160a81b900460ff16155b1561075857610b39612595565b600a80546001600160a01b0319166001600160a01b03831617905550565b60008281526005602052604081206002810154829182918291906001600160801b031680610b975760405162461bcd60e51b81526004016107c69061391f565b60008881526006602052604080822054600854915163385e3b1360e21b81526001600160a01b038b8116600483015260248201839052919392919091169063e178ec4c90604401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613b31565b6001600160a01b038116600090815260018601602052604090205490915080610c5a5760405162461bcd60e51b81526004016107c690613a4f565b83610c6761ffff83613b4e565b610c719190613b65565b600854604051631110456160e01b81526001600160a01b038581166004830152602482018790529299509116906311104561906044016040805180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce79190613b87565b60029690960154909c959b509699505050600160901b90940461ffff169550909350505050565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610d6e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d50575b50505050509050919050565b6007546001600160a01b03163314610dd05760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b60008181526006602052604090205415610dec57610dec613bab565b6000908152600660205260409020439055565b60008054600160a81b900460ff16610e2157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190613b31565b905090565b610ea4336121ab565b610ee05760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016107c6565b6001600160e01b0319811660009081526002602052604081208054909103610f4a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b8054421015610f9b5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016107c6565b6000816001018054610fac90613bc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613bc1565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506110576001830182613244565b50506000805460ff60b01b1916600160b01b178155604051309061107c908490613bfb565b6000604051808303816000865af19150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161111b81612e2d565b50505050565b611129612e4a565b6001600160e01b0319811660009081526002602052604081205490036111915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906107ea6001830182613244565b600081815260056020526040812060028101546001600160801b0316806112365760405162461bcd60e51b81526004016107c69061391f565b6001600160a01b03851660009081526001830160205260409020548061126e5760405162461bcd60e51b81526004016107c690613a4f565b8161127b61ffff83613b4e565b6112859190613b65565b9695505050505050565b600260205260009081526040902080546001820180549192916112b190613bc1565b80601f01602080910402602001604051908101604052809291908181526020018280546112dd90613bc1565b801561132a5780601f106112ff5761010080835404028352916020019161132a565b820191906000526020600020905b81548152906001019060200180831161130d57829003601f168201915b5050505050905082565b6000818152600560205260409020600201546060906001600160801b031661136e5760405162461bcd60e51b81526004016107c69061391f565b6008546000838152600560209081526040808320600690925291829020549151631594a52760e21b81526001600160a01b0390931692635652949c926109a99291600401613994565b600082815260056020526040812060028101548291906001600160801b0316806113f35760405162461bcd60e51b81526004016107c69061391f565b6008546000878152600660205260409081902054905163385e3b1360e21b81526001600160a01b038881166004830152602482019290925291169063e178ec4c90604401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190613b31565b6001600160a01b0381166000908152600184016020526040902054909450806114b35760405162461bcd60e51b81526004016107c690613a4f565b816114c061ffff83613b4e565b6114ca9190613b65565b93505050509250929050565b6000806114e28461271b565b6040805162ffffff84166020808301919091526001600160a01b03891682840152825180830384018152606090920190925280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81209395509193509190506000611573826115646020890189613c17565b88602001358960400135612ea4565b905083604001516001600160a01b0316816001600160a01b0316146115ce5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016107c6565b6115d987868661289d565b50505050505050565b600081815260056020526040902060028101546001600160801b0381169161ffff600160801b8304811692600160901b90041690836116335760405162461bcd60e51b81526004016107c69061391f565b509193909250565b6000818152600560205260409020600201546060906001600160801b03166116755760405162461bcd60e51b81526004016107c69061391f565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b03938416936305b232c893169063c263221690602401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c3a565b6040518363ffffffff1660e01b8152600401611719929190613c63565b600060405180830381865afa158015611736573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613c8e565b60008054600160b01b900460ff16806117815750600054600160a81b900460ff16155b156118f45761178e612595565b60075460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc9190613da0565b62ffffff16905061180d8382613dc5565b611818906001613dc5565b915060005b848110156118ed57826004600088888581811061183c5761183c6138da565b9050602002016020810190611851919061344d565b6001600160601b031916815260208101919091526040016000205585858281811061187e5761187e6138da565b9050602002016020810190611893919061344d565b6bffffffffffffffffffffffff19167f0a5e087b026d8f1c57e75d9d0cb0394c2ad3535e7a15d97d553be80476274cd0846040516118d391815260200190565b60405180910390a2806118e581613906565b91505061181d565b50506118ff565b6118ff6000366125cf565b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461197f5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016107c6565b6119d76119b383836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250612ed2565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6119e18282612fad565b5050565b6000818152600560205260409020600201546060906001600160801b0316611a1f5760405162461bcd60e51b81526004016107c69061391f565b6008546000838152600560209081526040808320600690925291829020549151636558b56b60e01b81526001600160a01b0390931692636558b56b926109a99291600401613994565b6000818152600560205260409020600281015460609182916001600160801b031680611aa65760405162461bcd60e51b81526004016107c69061391f565b815460408051602080840282018101909252828152918491830182828015611af757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ad9575b5050835193975083925050506001600160401b03811115611b1a57611b1a613684565b604051908082528060200260200182016040528015611b43578160200160208202803683370190505b50935060005b81811015611be3578261ffff8016856001016000898581518110611b6f57611b6f6138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611ba29190613b4e565b611bac9190613b65565b858281518110611bbe57611bbe6138da565b61ffff9092166020928302919091019091015280611bdb81613906565b915050611b49565b50505050915091565b60075460609081906000906001600160a01b03163314611c4a5760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b6000848152600560205260409020805480611c6757611c67613bab565b6000816001600160401b03811115611c8157611c81613684565b604051908082528060200260200182016040528015611caa578160200160208202803683370190505b5090506000826001600160401b03811115611cc757611cc7613684565b604051908082528060200260200182016040528015611cf0578160200160208202803683370190505b5090506000805b84811015611dfc57856000018181548110611d1457611d146138da565b9060005260206000200160009054906101000a90046001600160a01b0316848281518110611d4457611d446138da565b60200260200101906001600160a01b031690816001600160a01b031681525050856001016000858381518110611d7c57611d7c6138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110611db757611db76138da565b602002602001018181525050828181518110611dd557611dd56138da565b602002602001015182611de89190613dc5565b915080611df481613906565b915050611cf7565b5060085460008a815260066020526040908190205490516369fe610d60e01b81526001600160a01b03909216916369fe610d91611e3e91879190600401613dd8565b600060405180830381865afa158015611e5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e8391908101906139b6565b60085460008b81526006602052604080822054905163bda9a28b60e01b8152939b50909283926001600160a01b03169163bda9a28b91611ec7918991600401613dd8565b600060405180830381865afa158015611ee4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f0c9190810190613ad8565b91509150856001600160401b03811115611f2857611f28613684565b604051908082528060200260200182016040528015611f51578160200160208202803683370190505b5098506000805b87811015612069578461ffff8016878381518110611f7857611f786138da565b6020026020010151611f8a9190613b4e565b611f949190613b65565b8b8281518110611fa657611fa66138da565b602002602001019061ffff16908161ffff16815250508a8181518110611fce57611fce6138da565b60200260200101518a611fe19190613deb565b99506000801b848281518110611ff957611ff96138da565b602002602001015114158061202a57506000801b83828151811061201f5761201f6138da565b602002602001015114155b15612057578a8181518110612041576120416138da565b6020026020010151826120549190613deb565b91505b8061206181613906565b915050611f58565b506002909701805461ffff988916600160901b0261ffff60901b19998b16600160801b0271ffffffffffffffffffffffffffffffffffff199092166001600160801b0390961695909517179790971692909217909555509597949650929450505050565b6000818152600560205260409020600201546060906001600160801b03166121075760405162461bcd60e51b81526004016107c69061391f565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b039384169363df7c7c6893169063c263221690602401602060405180830381865afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218e9190613c3a565b6040518363ffffffff1660e01b81526004016109a9929190613c63565b60008054600160a01b900460ff1680156109ee5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190613e0d565b600054600160a01b900460ff161561227f5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016107c6565b6001600160a01b0382166122d55760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016107c6565b6001600160a01b03811661231e5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016107c6565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61239c612e4a565b600054600160a81b900460ff16156123f65760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016107c6565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061247c5750600054600160a81b900460ff16155b1561075857612489612595565b61ffff8111156124d15760405162461bcd60e51b81526020600482015260136024820152720bedac2f0acdee8cae4e640e8dede40d0d2ced606b1b60448201526064016107c6565b600760009054906101000a90046001600160a01b03166001600160a01b0316632e3645f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125489190613e2a565b61ffff168110156125905760405162461bcd60e51b81526020600482015260126024820152715f6d6178566f7465727320746f6f206c6f7760701b60448201526064016107c6565b600355565b600054600160b01b900460ff16156125c5573330146125b6576125b6613bab565b6000805460ff60b01b19169055565b6125cd612e4a565b565b6125d7612e4a565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126479190613e4e565b905060006126558242613dc5565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906126d39082613eb5565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161270c9493929190613f74565b60405180910390a15050505050565b60408051606081018252600080825260208201819052918101829052600760009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ae9190613da0565b6127b9906001613fba565b62ffffff81166000908152600660205260408120549193508190036128205760405162461bcd60e51b815260206004820152601e60248201527f726567697374726174696f6e206e6f7420617661696c61626c6520796574000060448201526064016107c6565b60085460405163164a335960e31b81526001600160a01b038681166004830152602482018490529091169063b2519ac890604401606060405180830381865afa158015612871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128959190613fd6565b915050915091565b6007546040516302e074f160e31b815262ffffff8416600482015260009182916001600160a01b0390911690631703a788906024016040805180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129129190614047565b915091508160000361295e5760405162461bcd60e51b8152602060048201526015602482015274766f746520706f77657220626c6f636b207a65726f60581b60448201526064016107c6565b806129ab5760405162461bcd60e51b815260206004820152601e60248201527f766f74657220726567697374726174696f6e206e6f7420656e61626c6564000060448201526064016107c6565b600954604051635b28c2eb60e11b81526001600160a01b03878116600483015262ffffff8716602483015260448201859052600092169063b65185d6906064016020604051808303816000875af1158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613e4e565b905060008111612a745760405162461bcd60e51b8152602060048201526011602482015270766f74657220776569676874207a65726f60781b60448201526064016107c6565b60085462ffffff8616600090815260066020526040808220549051631110456160e01b81526001600160a01b038a811660048301526024820192909252919283929116906311104561906044016040805180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190613b87565b600a549193509150600160a01b900460ff168015612b1d575081155b8015612b27575080155b15612b6a5760405162461bcd60e51b81526020600482015260136024820152721c1d589b1a58c81ad95e481c995c5d5a5c9959606a1b60448201526064016107c6565b62ffffff871660009081526005602090815260408083206001600160a01b038c168452600181019092529091205415612bda5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016107c6565b8054600354811015612c2c578154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038f16908117909155815290840190915260409020859055612dab565b6000600019815b83811015612ca0576000856000018281548110612c5257612c526138da565b60009182526020808320909101546001600160a01b03168083526001890190915260409091205490915080841115612c8b578093508294505b50508080612c9890613906565b915050612c33565b50868110612ce55760405162461bcd60e51b8152602060048201526012602482015271766f746520706f77657220746f6f206c6f7760701b60448201526064016107c6565b6000846000018381548110612cfc57612cfc6138da565b60009182526020808320909101546001600160a01b031680835260018801909152604082209190915585549091508d90869085908110612d3e57612d3e6138da565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558f8316825260018801905260408082208b90555162ffffff8f16928416917f98a7f87f8e2aa2f23f43769eff67782bb12946384b142d1ce1e8e38e05d9a3e691a35050505b60408089015189516020808c015184516001600160a01b0393841681529083169181019190915292830187905260608301869052608083018890529081169162ffffff8c16918d16907f824bc2cc10bfe21ead60b8c8a90716eb325b9335aa73eaede799abf38fce062c9060a00160405180910390a450505050505050505050565b3d604051818101604052816000823e8215612e46578181f35b8181fd5b612e52610dff565b6001600160a01b0316336001600160a01b0316146125cd5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016107c6565b600080600080612eb6888888886130bc565b925092509250612ec6828261318b565b50909695505050505050565b60008082604051602001612ee6919061406c565b6040516020818303038152906040528051906020012090506000805b8651811015612f5e57868181518110612f1d57612f1d6138da565b60200260200101518303612f4c57858181518110612f3d57612f3d6138da565b60200260200101519150612f5e565b80612f5681613906565b915050612f02565b506001600160a01b038116612fa45760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016107c6565b95945050505050565b612fe3828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250612ed2565b600760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061303982826040518060400160405280600d81526020016c22b73a34ba3ca6b0b730b3b2b960991b815250612ed2565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613098828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b815250612ed2565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156130f75750600091506003905082613181565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561314b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661317757506000925060019150829050613181565b9250600091508190505b9450945094915050565b600082600381111561319f5761319f61407f565b036131a8575050565b60018260038111156131bc576131bc61407f565b036131da5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156131ee576131ee61407f565b0361320f5760405163fce698f760e01b8152600481018290526024016107c6565b60038260038111156132235761322361407f565b036119e1576040516335e2f38360e21b8152600481018290526024016107c6565b50805461325090613bc1565b6000825580601f10613260575050565b601f01602090049060005260206000209081019061076391905b8082111561328e576000815560010161327a565b5090565b801515811461076357600080fd5b6000602082840312156132b257600080fd5b81356118ff81613292565b6001600160a01b038116811461076357600080fd5b6000602082840312156132e457600080fd5b81356118ff816132bd565b60006020828403121561330157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156133415781516001600160a01b03168752958201959082019060010161331c565b509495945050505050565b60408152600061335f6040830185613308565b82810360208481019190915284518083528582019282019060005b818110156133965784518352938301939183019160010161337a565b5090979650505050505050565b6020815260006118ff6020830184613308565b600080604083850312156133c957600080fd5b82356133d4816132bd565b946020939093013593505050565b600081518084526020808501945080840160005b83811015613341578151875295820195908201906001016133f6565b60408152600061342560408301856133e2565b8281036020840152612fa481856133e2565b6001600160601b03198116811461076357600080fd5b60006020828403121561345f57600080fd5b81356118ff81613437565b6000806040838503121561347d57600080fd5b82359150602083013561348f816132bd565b809150509250929050565b6000602082840312156134ac57600080fd5b81356001600160e01b0319811681146118ff57600080fd5b60005b838110156134df5781810151838201526020016134c7565b50506000910152565b600081518084526135008160208601602086016134c4565b601f01601f19169290920160200192915050565b82815260406020820152600061352d60408301846134e8565b949350505050565b600080828403608081121561354957600080fd5b8335613554816132bd565b92506060601f198201121561356857600080fd5b506020830190509250929050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b838110156135fc57888603603f19018552825180518088529088019088880190845b818110156135e65783516001600160601b0319168352928a0192918a01916001016135c0565b509097505050938601939186019160010161359e565b509398975050505050505050565b60008060006040848603121561361f57600080fd5b83356001600160401b038082111561363657600080fd5b818601915086601f83011261364a57600080fd5b81358181111561365957600080fd5b8760208260051b850101111561366e57600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156136c2576136c2613684565b604052919050565b60006001600160401b038211156136e3576136e3613684565b5060051b60200190565b600082601f8301126136fe57600080fd5b8135602061371361370e836136ca565b61369a565b82815260059290921b8401810191818101908684111561373257600080fd5b8286015b84811015613756578035613749816132bd565b8352918301918301613736565b509695505050505050565b6000806040838503121561377457600080fd5b82356001600160401b038082111561378b57600080fd5b818501915085601f83011261379f57600080fd5b813560206137af61370e836136ca565b82815260059290921b840181019181810190898411156137ce57600080fd5b948201945b838610156137ec578535825294820194908201906137d3565b9650508601359250508082111561380257600080fd5b5061380f858286016136ed565b9150509250929050565b600081518084526020808501945080840160005b8381101561334157815161ffff168752958201959082019060010161382d565b6040815260006138606040830185613308565b8281036020840152612fa48185613819565b6060815260006138856060830186613308565b82810360208401526138978186613819565b91505061ffff83166040830152949350505050565b600080604083850312156138bf57600080fd5b82356138ca816132bd565b9150602083013561348f816132bd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613918576139186138f0565b5060010190565b6020808252601d908201527f7265776172642065706f6368206964206e6f7420737570706f72746564000000604082015260600190565b6000815480845260208085019450836000528060002060005b838110156133415781546001600160a01b03168752958201956001918201910161396f565b6040815260006139a76040830185613956565b90508260208301529392505050565b600060208083850312156139c957600080fd5b82516001600160401b038111156139df57600080fd5b8301601f810185136139f057600080fd5b80516139fe61370e826136ca565b81815260059190911b82018301908381019087831115613a1d57600080fd5b928401925b82841015613a44578351613a35816132bd565b82529284019290840190613a22565b979650505050505050565b6020808252601490820152731d9bdd195c881b9bdd081c9959da5cdd195c995960621b604082015260600190565b600082601f830112613a8e57600080fd5b81516020613a9e61370e836136ca565b82815260059290921b84018101918181019086841115613abd57600080fd5b8286015b848110156137565780518352918301918301613ac1565b60008060408385031215613aeb57600080fd5b82516001600160401b0380821115613b0257600080fd5b613b0e86838701613a7d565b93506020850151915080821115613b2457600080fd5b5061380f85828601613a7d565b600060208284031215613b4357600080fd5b81516118ff816132bd565b80820281158282048414176109ee576109ee6138f0565b600082613b8257634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613b9a57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052600160045260246000fd5b600181811c90821680613bd557607f821691505b602082108103613bf557634e487b7160e01b600052602260045260246000fd5b50919050565b60008251613c0d8184602087016134c4565b9190910192915050565b600060208284031215613c2957600080fd5b813560ff811681146118ff57600080fd5b600060208284031215613c4c57600080fd5b81516001600160401b03811681146118ff57600080fd5b604081526000613c766040830185613956565b90506001600160401b03831660208301529392505050565b60006020808385031215613ca157600080fd5b82516001600160401b0380821115613cb857600080fd5b818501915085601f830112613ccc57600080fd5b8151613cda61370e826136ca565b818152600591821b8401850191858201919089841115613cf957600080fd5b8686015b84811015613d9157805186811115613d155760008081fd5b8701603f81018c13613d275760008081fd5b888101516040613d3961370e836136ca565b82815291851b83018101918b8101908f841115613d565760008081fd5b938201935b83851015613d805784519250613d7083613437565b828252938c0193908c0190613d5b565b885250505093880193508701613cfd565b50909998505050505050505050565b600060208284031215613db257600080fd5b815162ffffff811681146118ff57600080fd5b808201808211156109ee576109ee6138f0565b6040815260006139a76040830185613308565b61ffff818116838216019080821115613e0657613e066138f0565b5092915050565b600060208284031215613e1f57600080fd5b81516118ff81613292565b600060208284031215613e3c57600080fd5b815161ffff811681146118ff57600080fd5b600060208284031215613e6057600080fd5b5051919050565b601f8211156107ea57600081815260208120601f850160051c81016020861015613e8e5750805b601f850160051c820191505b81811015613ead57828155600101613e9a565b505050505050565b81516001600160401b03811115613ece57613ece613684565b613ee281613edc8454613bc1565b84613e67565b602080601f831160018114613f175760008415613eff5750858301515b600019600386901b1c1916600185901b178555613ead565b600085815260208120601f198616915b82811015613f4657888601518255948401946001909101908401613f27565b5085821015613f645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b62ffffff818116838216019080821115613e0657613e066138f0565b600060608284031215613fe857600080fd5b604051606081018181106001600160401b038211171561400a5761400a613684565b6040528251614018816132bd565b81526020830151614028816132bd565b6020820152604083015161403b816132bd565b60408201529392505050565b6000806040838503121561405a57600080fd5b82519150602083015161348f81613292565b6020815260006118ff60208301846134e8565b634e487b7160e01b600052602160045260246000fdfea264697066735822122038fce6217892199d2628bb8731aa932fad6a707cd63e82e83cc5a2fc85094ef764736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102695760003560e01c806374e6310e11610151578063b9111169116100c3578063e17f212e11610087578063e17f212e1461069a578063ef88bf13146106ae578063f5a98383146106c1578063faae7fc9146106c9578063fd587daf146106dc578063fff50753146106ef57600080fd5b8063b911116914610628578063c452e47f14610649578063cc8356ca1461066b578063d5e50a631461067e578063debfda301461068757600080fd5b806392e3e45f1161011557806392e3e45f1461057e5780639508858e14610592578063987a4500146105cf578063aeacaa6f146105ef578063b00c0b7614610602578063b61b57fa1461061557600080fd5b806374e6310e146104ef5780637c2cb921146105105780638c645728146105235780638e467784146105585780638f7d09571461056b57600080fd5b806344b571d9116101ea5780635267a15d116101ae5780635267a15d146104615780635aa6e675146104885780635ff270791461049057806362354e03146104a357806367fc4029146104b65780636ddcd4bc146104c957600080fd5b806344b571d9146103a0578063457c2e47146103dd5780634f5a9968146103f057806350b1d61b1461043b578063521318231461044e57600080fd5b80633399408111610231578063339940811461030b578063369e94341461032c57806339661f5f1461034c5780633c5cb76f1461036d578063448436b11461038d57600080fd5b806317da6b311461026e57806318d1812d1461028357806328be8e3a1461029657806329a2e5ed146102c05780632cc2c0f6146102e0575b600080fd5b61028161027c3660046132a0565b61070f565b005b6102816102913660046132d2565b610766565b6102a96102a43660046132ef565b6107ef565b6040516102b792919061334c565b60405180910390f35b6102d36102ce3660046132ef565b610926565b6040516102b791906133a3565b600a546102f3906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b61031e6103193660046133b6565b6109f4565b6040519081526020016102b7565b61031e61033a3660046132ef565b60009081526005602052604090205490565b61035f61035a3660046132ef565b610a37565b6040516102b7929190613412565b61031e61037b36600461344d565b60046020526000908152604090205481565b61028161039b3660046132d2565b610b0a565b6103b36103ae36600461346a565b610b57565b60408051948552602085019390935261ffff918216928401929092521660608201526080016102b7565b6102d36103eb3660046132ef565b610d0e565b61042b6103fe3660046133b6565b60009081526005602090815260408083206001600160a01b03949094168352600190930190522054151590565b60405190151581526020016102b7565b6008546102f3906001600160a01b031681565b61028161045c3660046132ef565b610d7a565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102f3565b6102f3610dff565b61028161049e36600461349a565b610e9b565b6000546102f3906001600160a01b031681565b6102816104c436600461349a565b611121565b6104dc6104d73660046133b6565b6111fd565b60405161ffff90911681526020016102b7565b6105026104fd36600461349a565b61128f565b6040516102b7929190613514565b6102d361051e3660046132ef565b611334565b61053661053136600461346a565b6113b7565b604080516001600160a01b03909316835261ffff9091166020830152016102b7565b6009546102f3906001600160a01b031681565b610281610579366004613535565b6114d6565b600a5461042b90600160a01b900460ff1681565b6105a56105a03660046132ef565b6115e2565b604080516001600160801b03909416845261ffff92831660208501529116908201526060016102b7565b6105e26105dd3660046132ef565b61163b565b6040516102b79190613576565b61031e6105fd36600461360a565b61175e565b610281610610366004613761565b611906565b6102d36106233660046132ef565b6119e5565b61063b6106363660046132ef565b611a68565b6040516102b792919061384d565b61065c6106573660046132ef565b611bec565b6040516102b793929190613872565b6102d36106793660046132ef565b6120cd565b61031e60035481565b61042b6106953660046132d2565b6121ab565b60005461042b90600160a81b900460ff1681565b6102816106bc3660046138ac565b61222e565b610281612394565b6007546102f3906001600160a01b031681565b6102816106ea3660046132ef565b61245a565b61031e6106fd3660046132ef565b60066020526000908152604090205481565b600054600160b01b900460ff16806107315750600054600160a81b900460ff16155b156107585761073e612595565b600a805460ff60a01b1916600160a01b8315150217905550565b6107636000366125cf565b50565b600a546001600160a01b031633146107cf5760405162461bcd60e51b815260206004820152602160248201527f6f6e6c792073797374656d20726567697374726174696f6e20636f6e747261636044820152601d60fa1b60648201526084015b60405180910390fd5b6000806107db8361271b565b915091506107ea83838361289d565b505050565b600081815260056020908152604091829020805483518184028101840190945280845260609384939091839183018282801561085457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610836575b5050835193965083925050506001600160401b0381111561087757610877613684565b6040519080825280602002602001820160405280156108a0578160200160208202803683370190505b50925060005b8181101561091e578260010160008683815181106108c6576108c66138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610901576109016138da565b60209081029190910101528061091681613906565b9150506108a6565b505050915091565b6000818152600560205260409020600201546060906001600160801b03166109605760405162461bcd60e51b81526004016107c69061391f565b60085460008381526005602090815260408083206006909252918290205491516369fe610d60e01b81526001600160a01b03909316926369fe610d926109a99291600401613994565b600060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee91908101906139b6565b92915050565b60008181526005602090815260408083206001600160a01b0386168452600101909152902054806109ee5760405162461bcd60e51b81526004016107c690613a4f565b60008181526005602052604090206002015460609081906001600160801b0316610a735760405162461bcd60e51b81526004016107c69061391f565b600854600084815260056020908152604080832060069092529182902054915163bda9a28b60e01b81526001600160a01b039093169263bda9a28b92610abc9291600401613994565b600060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b019190810190613ad8565b91509150915091565b600054600160b01b900460ff1680610b2c5750600054600160a81b900460ff16155b1561075857610b39612595565b600a80546001600160a01b0319166001600160a01b03831617905550565b60008281526005602052604081206002810154829182918291906001600160801b031680610b975760405162461bcd60e51b81526004016107c69061391f565b60008881526006602052604080822054600854915163385e3b1360e21b81526001600160a01b038b8116600483015260248201839052919392919091169063e178ec4c90604401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613b31565b6001600160a01b038116600090815260018601602052604090205490915080610c5a5760405162461bcd60e51b81526004016107c690613a4f565b83610c6761ffff83613b4e565b610c719190613b65565b600854604051631110456160e01b81526001600160a01b038581166004830152602482018790529299509116906311104561906044016040805180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce79190613b87565b60029690960154909c959b509699505050600160901b90940461ffff169550909350505050565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610d6e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d50575b50505050509050919050565b6007546001600160a01b03163314610dd05760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b60008181526006602052604090205415610dec57610dec613bab565b6000908152600660205260409020439055565b60008054600160a81b900460ff16610e2157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190613b31565b905090565b610ea4336121ab565b610ee05760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016107c6565b6001600160e01b0319811660009081526002602052604081208054909103610f4a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b8054421015610f9b5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016107c6565b6000816001018054610fac90613bc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613bc1565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506110576001830182613244565b50506000805460ff60b01b1916600160b01b178155604051309061107c908490613bfb565b6000604051808303816000865af19150503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161111b81612e2d565b50505050565b611129612e4a565b6001600160e01b0319811660009081526002602052604081205490036111915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906107ea6001830182613244565b600081815260056020526040812060028101546001600160801b0316806112365760405162461bcd60e51b81526004016107c69061391f565b6001600160a01b03851660009081526001830160205260409020548061126e5760405162461bcd60e51b81526004016107c690613a4f565b8161127b61ffff83613b4e565b6112859190613b65565b9695505050505050565b600260205260009081526040902080546001820180549192916112b190613bc1565b80601f01602080910402602001604051908101604052809291908181526020018280546112dd90613bc1565b801561132a5780601f106112ff5761010080835404028352916020019161132a565b820191906000526020600020905b81548152906001019060200180831161130d57829003601f168201915b5050505050905082565b6000818152600560205260409020600201546060906001600160801b031661136e5760405162461bcd60e51b81526004016107c69061391f565b6008546000838152600560209081526040808320600690925291829020549151631594a52760e21b81526001600160a01b0390931692635652949c926109a99291600401613994565b600082815260056020526040812060028101548291906001600160801b0316806113f35760405162461bcd60e51b81526004016107c69061391f565b6008546000878152600660205260409081902054905163385e3b1360e21b81526001600160a01b038881166004830152602482019290925291169063e178ec4c90604401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190613b31565b6001600160a01b0381166000908152600184016020526040902054909450806114b35760405162461bcd60e51b81526004016107c690613a4f565b816114c061ffff83613b4e565b6114ca9190613b65565b93505050509250929050565b6000806114e28461271b565b6040805162ffffff84166020808301919091526001600160a01b03891682840152825180830384018152606090920190925280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81209395509193509190506000611573826115646020890189613c17565b88602001358960400135612ea4565b905083604001516001600160a01b0316816001600160a01b0316146115ce5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016107c6565b6115d987868661289d565b50505050505050565b600081815260056020526040902060028101546001600160801b0381169161ffff600160801b8304811692600160901b90041690836116335760405162461bcd60e51b81526004016107c69061391f565b509193909250565b6000818152600560205260409020600201546060906001600160801b03166116755760405162461bcd60e51b81526004016107c69061391f565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b03938416936305b232c893169063c263221690602401602060405180830381865afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c3a565b6040518363ffffffff1660e01b8152600401611719929190613c63565b600060405180830381865afa158015611736573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613c8e565b60008054600160b01b900460ff16806117815750600054600160a81b900460ff16155b156118f45761178e612595565b60075460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc9190613da0565b62ffffff16905061180d8382613dc5565b611818906001613dc5565b915060005b848110156118ed57826004600088888581811061183c5761183c6138da565b9050602002016020810190611851919061344d565b6001600160601b031916815260208101919091526040016000205585858281811061187e5761187e6138da565b9050602002016020810190611893919061344d565b6bffffffffffffffffffffffff19167f0a5e087b026d8f1c57e75d9d0cb0394c2ad3535e7a15d97d553be80476274cd0846040516118d391815260200190565b60405180910390a2806118e581613906565b91505061181d565b50506118ff565b6118ff6000366125cf565b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461197f5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016107c6565b6119d76119b383836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250612ed2565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6119e18282612fad565b5050565b6000818152600560205260409020600201546060906001600160801b0316611a1f5760405162461bcd60e51b81526004016107c69061391f565b6008546000838152600560209081526040808320600690925291829020549151636558b56b60e01b81526001600160a01b0390931692636558b56b926109a99291600401613994565b6000818152600560205260409020600281015460609182916001600160801b031680611aa65760405162461bcd60e51b81526004016107c69061391f565b815460408051602080840282018101909252828152918491830182828015611af757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ad9575b5050835193975083925050506001600160401b03811115611b1a57611b1a613684565b604051908082528060200260200182016040528015611b43578160200160208202803683370190505b50935060005b81811015611be3578261ffff8016856001016000898581518110611b6f57611b6f6138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611ba29190613b4e565b611bac9190613b65565b858281518110611bbe57611bbe6138da565b61ffff9092166020928302919091019091015280611bdb81613906565b915050611b49565b50505050915091565b60075460609081906000906001600160a01b03163314611c4a5760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b6000848152600560205260409020805480611c6757611c67613bab565b6000816001600160401b03811115611c8157611c81613684565b604051908082528060200260200182016040528015611caa578160200160208202803683370190505b5090506000826001600160401b03811115611cc757611cc7613684565b604051908082528060200260200182016040528015611cf0578160200160208202803683370190505b5090506000805b84811015611dfc57856000018181548110611d1457611d146138da565b9060005260206000200160009054906101000a90046001600160a01b0316848281518110611d4457611d446138da565b60200260200101906001600160a01b031690816001600160a01b031681525050856001016000858381518110611d7c57611d7c6138da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110611db757611db76138da565b602002602001018181525050828181518110611dd557611dd56138da565b602002602001015182611de89190613dc5565b915080611df481613906565b915050611cf7565b5060085460008a815260066020526040908190205490516369fe610d60e01b81526001600160a01b03909216916369fe610d91611e3e91879190600401613dd8565b600060405180830381865afa158015611e5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e8391908101906139b6565b60085460008b81526006602052604080822054905163bda9a28b60e01b8152939b50909283926001600160a01b03169163bda9a28b91611ec7918991600401613dd8565b600060405180830381865afa158015611ee4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f0c9190810190613ad8565b91509150856001600160401b03811115611f2857611f28613684565b604051908082528060200260200182016040528015611f51578160200160208202803683370190505b5098506000805b87811015612069578461ffff8016878381518110611f7857611f786138da565b6020026020010151611f8a9190613b4e565b611f949190613b65565b8b8281518110611fa657611fa66138da565b602002602001019061ffff16908161ffff16815250508a8181518110611fce57611fce6138da565b60200260200101518a611fe19190613deb565b99506000801b848281518110611ff957611ff96138da565b602002602001015114158061202a57506000801b83828151811061201f5761201f6138da565b602002602001015114155b15612057578a8181518110612041576120416138da565b6020026020010151826120549190613deb565b91505b8061206181613906565b915050611f58565b506002909701805461ffff988916600160901b0261ffff60901b19998b16600160801b0271ffffffffffffffffffffffffffffffffffff199092166001600160801b0390961695909517179790971692909217909555509597949650929450505050565b6000818152600560205260409020600201546060906001600160801b03166121075760405162461bcd60e51b81526004016107c69061391f565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b039384169363df7c7c6893169063c263221690602401602060405180830381865afa15801561216a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218e9190613c3a565b6040518363ffffffff1660e01b81526004016109a9929190613c63565b60008054600160a01b900460ff1680156109ee5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190613e0d565b600054600160a01b900460ff161561227f5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016107c6565b6001600160a01b0382166122d55760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016107c6565b6001600160a01b03811661231e5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016107c6565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61239c612e4a565b600054600160a81b900460ff16156123f65760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016107c6565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061247c5750600054600160a81b900460ff16155b1561075857612489612595565b61ffff8111156124d15760405162461bcd60e51b81526020600482015260136024820152720bedac2f0acdee8cae4e640e8dede40d0d2ced606b1b60448201526064016107c6565b600760009054906101000a90046001600160a01b03166001600160a01b0316632e3645f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125489190613e2a565b61ffff168110156125905760405162461bcd60e51b81526020600482015260126024820152715f6d6178566f7465727320746f6f206c6f7760701b60448201526064016107c6565b600355565b600054600160b01b900460ff16156125c5573330146125b6576125b6613bab565b6000805460ff60b01b19169055565b6125cd612e4a565b565b6125d7612e4a565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126479190613e4e565b905060006126558242613dc5565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906126d39082613eb5565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405161270c9493929190613f74565b60405180910390a15050505050565b60408051606081018252600080825260208201819052918101829052600760009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ae9190613da0565b6127b9906001613fba565b62ffffff81166000908152600660205260408120549193508190036128205760405162461bcd60e51b815260206004820152601e60248201527f726567697374726174696f6e206e6f7420617661696c61626c6520796574000060448201526064016107c6565b60085460405163164a335960e31b81526001600160a01b038681166004830152602482018490529091169063b2519ac890604401606060405180830381865afa158015612871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128959190613fd6565b915050915091565b6007546040516302e074f160e31b815262ffffff8416600482015260009182916001600160a01b0390911690631703a788906024016040805180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129129190614047565b915091508160000361295e5760405162461bcd60e51b8152602060048201526015602482015274766f746520706f77657220626c6f636b207a65726f60581b60448201526064016107c6565b806129ab5760405162461bcd60e51b815260206004820152601e60248201527f766f74657220726567697374726174696f6e206e6f7420656e61626c6564000060448201526064016107c6565b600954604051635b28c2eb60e11b81526001600160a01b03878116600483015262ffffff8716602483015260448201859052600092169063b65185d6906064016020604051808303816000875af1158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613e4e565b905060008111612a745760405162461bcd60e51b8152602060048201526011602482015270766f74657220776569676874207a65726f60781b60448201526064016107c6565b60085462ffffff8616600090815260066020526040808220549051631110456160e01b81526001600160a01b038a811660048301526024820192909252919283929116906311104561906044016040805180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190613b87565b600a549193509150600160a01b900460ff168015612b1d575081155b8015612b27575080155b15612b6a5760405162461bcd60e51b81526020600482015260136024820152721c1d589b1a58c81ad95e481c995c5d5a5c9959606a1b60448201526064016107c6565b62ffffff871660009081526005602090815260408083206001600160a01b038c168452600181019092529091205415612bda5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016107c6565b8054600354811015612c2c578154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038f16908117909155815290840190915260409020859055612dab565b6000600019815b83811015612ca0576000856000018281548110612c5257612c526138da565b60009182526020808320909101546001600160a01b03168083526001890190915260409091205490915080841115612c8b578093508294505b50508080612c9890613906565b915050612c33565b50868110612ce55760405162461bcd60e51b8152602060048201526012602482015271766f746520706f77657220746f6f206c6f7760701b60448201526064016107c6565b6000846000018381548110612cfc57612cfc6138da565b60009182526020808320909101546001600160a01b031680835260018801909152604082209190915585549091508d90869085908110612d3e57612d3e6138da565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558f8316825260018801905260408082208b90555162ffffff8f16928416917f98a7f87f8e2aa2f23f43769eff67782bb12946384b142d1ce1e8e38e05d9a3e691a35050505b60408089015189516020808c015184516001600160a01b0393841681529083169181019190915292830187905260608301869052608083018890529081169162ffffff8c16918d16907f824bc2cc10bfe21ead60b8c8a90716eb325b9335aa73eaede799abf38fce062c9060a00160405180910390a450505050505050505050565b3d604051818101604052816000823e8215612e46578181f35b8181fd5b612e52610dff565b6001600160a01b0316336001600160a01b0316146125cd5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016107c6565b600080600080612eb6888888886130bc565b925092509250612ec6828261318b565b50909695505050505050565b60008082604051602001612ee6919061406c565b6040516020818303038152906040528051906020012090506000805b8651811015612f5e57868181518110612f1d57612f1d6138da565b60200260200101518303612f4c57858181518110612f3d57612f3d6138da565b60200260200101519150612f5e565b80612f5681613906565b915050612f02565b506001600160a01b038116612fa45760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016107c6565b95945050505050565b612fe3828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250612ed2565b600760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061303982826040518060400160405280600d81526020016c22b73a34ba3ca6b0b730b3b2b960991b815250612ed2565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613098828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b815250612ed2565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156130f75750600091506003905082613181565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561314b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661317757506000925060019150829050613181565b9250600091508190505b9450945094915050565b600082600381111561319f5761319f61407f565b036131a8575050565b60018260038111156131bc576131bc61407f565b036131da5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156131ee576131ee61407f565b0361320f5760405163fce698f760e01b8152600481018290526024016107c6565b60038260038111156132235761322361407f565b036119e1576040516335e2f38360e21b8152600481018290526024016107c6565b50805461325090613bc1565b6000825580601f10613260575050565b601f01602090049060005260206000209081019061076391905b8082111561328e576000815560010161327a565b5090565b801515811461076357600080fd5b6000602082840312156132b257600080fd5b81356118ff81613292565b6001600160a01b038116811461076357600080fd5b6000602082840312156132e457600080fd5b81356118ff816132bd565b60006020828403121561330157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156133415781516001600160a01b03168752958201959082019060010161331c565b509495945050505050565b60408152600061335f6040830185613308565b82810360208481019190915284518083528582019282019060005b818110156133965784518352938301939183019160010161337a565b5090979650505050505050565b6020815260006118ff6020830184613308565b600080604083850312156133c957600080fd5b82356133d4816132bd565b946020939093013593505050565b600081518084526020808501945080840160005b83811015613341578151875295820195908201906001016133f6565b60408152600061342560408301856133e2565b8281036020840152612fa481856133e2565b6001600160601b03198116811461076357600080fd5b60006020828403121561345f57600080fd5b81356118ff81613437565b6000806040838503121561347d57600080fd5b82359150602083013561348f816132bd565b809150509250929050565b6000602082840312156134ac57600080fd5b81356001600160e01b0319811681146118ff57600080fd5b60005b838110156134df5781810151838201526020016134c7565b50506000910152565b600081518084526135008160208601602086016134c4565b601f01601f19169290920160200192915050565b82815260406020820152600061352d60408301846134e8565b949350505050565b600080828403608081121561354957600080fd5b8335613554816132bd565b92506060601f198201121561356857600080fd5b506020830190509250929050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b838110156135fc57888603603f19018552825180518088529088019088880190845b818110156135e65783516001600160601b0319168352928a0192918a01916001016135c0565b509097505050938601939186019160010161359e565b509398975050505050505050565b60008060006040848603121561361f57600080fd5b83356001600160401b038082111561363657600080fd5b818601915086601f83011261364a57600080fd5b81358181111561365957600080fd5b8760208260051b850101111561366e57600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156136c2576136c2613684565b604052919050565b60006001600160401b038211156136e3576136e3613684565b5060051b60200190565b600082601f8301126136fe57600080fd5b8135602061371361370e836136ca565b61369a565b82815260059290921b8401810191818101908684111561373257600080fd5b8286015b84811015613756578035613749816132bd565b8352918301918301613736565b509695505050505050565b6000806040838503121561377457600080fd5b82356001600160401b038082111561378b57600080fd5b818501915085601f83011261379f57600080fd5b813560206137af61370e836136ca565b82815260059290921b840181019181810190898411156137ce57600080fd5b948201945b838610156137ec578535825294820194908201906137d3565b9650508601359250508082111561380257600080fd5b5061380f858286016136ed565b9150509250929050565b600081518084526020808501945080840160005b8381101561334157815161ffff168752958201959082019060010161382d565b6040815260006138606040830185613308565b8281036020840152612fa48185613819565b6060815260006138856060830186613308565b82810360208401526138978186613819565b91505061ffff83166040830152949350505050565b600080604083850312156138bf57600080fd5b82356138ca816132bd565b9150602083013561348f816132bd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613918576139186138f0565b5060010190565b6020808252601d908201527f7265776172642065706f6368206964206e6f7420737570706f72746564000000604082015260600190565b6000815480845260208085019450836000528060002060005b838110156133415781546001600160a01b03168752958201956001918201910161396f565b6040815260006139a76040830185613956565b90508260208301529392505050565b600060208083850312156139c957600080fd5b82516001600160401b038111156139df57600080fd5b8301601f810185136139f057600080fd5b80516139fe61370e826136ca565b81815260059190911b82018301908381019087831115613a1d57600080fd5b928401925b82841015613a44578351613a35816132bd565b82529284019290840190613a22565b979650505050505050565b6020808252601490820152731d9bdd195c881b9bdd081c9959da5cdd195c995960621b604082015260600190565b600082601f830112613a8e57600080fd5b81516020613a9e61370e836136ca565b82815260059290921b84018101918181019086841115613abd57600080fd5b8286015b848110156137565780518352918301918301613ac1565b60008060408385031215613aeb57600080fd5b82516001600160401b0380821115613b0257600080fd5b613b0e86838701613a7d565b93506020850151915080821115613b2457600080fd5b5061380f85828601613a7d565b600060208284031215613b4357600080fd5b81516118ff816132bd565b80820281158282048414176109ee576109ee6138f0565b600082613b8257634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613b9a57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052600160045260246000fd5b600181811c90821680613bd557607f821691505b602082108103613bf557634e487b7160e01b600052602260045260246000fd5b50919050565b60008251613c0d8184602087016134c4565b9190910192915050565b600060208284031215613c2957600080fd5b813560ff811681146118ff57600080fd5b600060208284031215613c4c57600080fd5b81516001600160401b03811681146118ff57600080fd5b604081526000613c766040830185613956565b90506001600160401b03831660208301529392505050565b60006020808385031215613ca157600080fd5b82516001600160401b0380821115613cb857600080fd5b818501915085601f830112613ccc57600080fd5b8151613cda61370e826136ca565b818152600591821b8401850191858201919089841115613cf957600080fd5b8686015b84811015613d9157805186811115613d155760008081fd5b8701603f81018c13613d275760008081fd5b888101516040613d3961370e836136ca565b82815291851b83018101918b8101908f841115613d565760008081fd5b938201935b83851015613d805784519250613d7083613437565b828252938c0193908c0190613d5b565b885250505093880193508701613cfd565b50909998505050505050505050565b600060208284031215613db257600080fd5b815162ffffff811681146118ff57600080fd5b808201808211156109ee576109ee6138f0565b6040815260006139a76040830185613308565b61ffff818116838216019080821115613e0657613e066138f0565b5092915050565b600060208284031215613e1f57600080fd5b81516118ff81613292565b600060208284031215613e3c57600080fd5b815161ffff811681146118ff57600080fd5b600060208284031215613e6057600080fd5b5051919050565b601f8211156107ea57600081815260208120601f850160051c81016020861015613e8e5750805b601f850160051c820191505b81811015613ead57828155600101613e9a565b505050505050565b81516001600160401b03811115613ece57613ece613684565b613ee281613edc8454613bc1565b84613e67565b602080601f831160018114613f175760008415613eff5750858301515b600019600386901b1c1916600185901b178555613ead565b600085815260208120601f198616915b82811015613f4657888601518255948401946001909101908401613f27565b5085821015613f645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b62ffffff818116838216019080821115613e0657613e066138f0565b600060608284031215613fe857600080fd5b604051606081018181106001600160401b038211171561400a5761400a613684565b6040528251614018816132bd565b81526020830151614028816132bd565b6020820152604083015161403b816132bd565b60408201529392505050565b6000806040838503121561405a57600080fd5b82519150602083015161348f81613292565b6020815260006118ff60208301846134e8565b634e487b7160e01b600052602160045260246000fdfea264697066735822122038fce6217892199d2628bb8731aa932fad6a707cd63e82e83cc5a2fc85094ef764736f6c63430008140033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162004c8f38038062004c8f833981016040819052620000349162000761565b8689896200004382826200045f565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5061ffff861115620000c85760405162461bcd60e51b815260206004820152601360248201527f5f6d6178566f7465727320746f6f20686967680000000000000000000000000060448201526064015b60405180910390fd5b600386905581518015801590620000df5750868111155b6200012d5760405162461bcd60e51b815260206004820152601d60248201527f5f696e697469616c566f74657273206c656e67746820696e76616c69640000006044820152606401620000bf565b815181146200017f5760405162461bcd60e51b815260206004820152601a60248201527f6172726179206c656e6774687320646f206e6f74206d617463680000000000006044820152606401620000bf565b438510620001f65760405162461bcd60e51b815260206004820152603e60248201527f5f696e697469616c4e65775369676e696e67506f6c696379496e697469616c6960448201527f7a6174696f6e5374617274426c6f636b4e756d62657220696e76616c696400006064820152608401620000bf565b6000868152600660209081526040808320889055600590915281209080805b8481101562000319578360000187828151811062000237576200023762000839565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055855186908290811062000289576200028962000839565b6020026020010151846001016000898481518110620002ac57620002ac62000839565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550858181518110620002ed57620002ed62000839565b60200260200101518362000302919062000865565b925080620003108162000881565b91505062000215565b5060005b8481101562000384578261ffff801687838151811062000341576200034162000839565b60200260200101516200035591906200089d565b620003619190620008b7565b6200036d9083620008da565b9150806200037b8162000881565b9150506200031d565b508061ffff168761ffff161115620004055760405162461bcd60e51b815260206004820152603a60248201527f5f696e697469616c4e6f726d616c697365645765696768747353756d4f66566f60448201527f74657273576974685075626c69634b65797320696e76616c69640000000000006064820152608401620000bf565b60029290920180546001600160801b03929092166001600160901b031990921691909117600160801b61ffff938416021761ffff60901b1916600160901b96909216959095021790935550620008ff975050505050505050565b600054600160a01b900460ff1615620004bb5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620005135760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b0381166200055e5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b0381168114620005ea57600080fd5b50565b8051620005fa81620005d4565b919050565b805161ffff81168114620005fa57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000653576200065362000612565b604052919050565b60006001600160401b0382111562000677576200067762000612565b5060051b60200190565b600082601f8301126200069357600080fd5b81516020620006ac620006a6836200065b565b62000628565b82815260059290921b84018101918181019086841115620006cc57600080fd5b8286015b84811015620006f4578051620006e681620005d4565b8352918301918301620006d0565b509695505050505050565b600082601f8301126200071157600080fd5b8151602062000724620006a6836200065b565b82815260059290921b840181019181810190868411156200074457600080fd5b8286015b84811015620006f4578051835291830191830162000748565b60008060008060008060008060006101208a8c0312156200078157600080fd5b89516200078e81620005d4565b60208b0151909950620007a181620005d4565b9750620007b160408b01620005ed565b965060608a0151955060808a0151945060a08a01519350620007d660c08b01620005ff565b60e08b01519093506001600160401b0380821115620007f457600080fd5b620008028d838e0162000681565b93506101008c01519150808211156200081a57600080fd5b50620008298c828d01620006ff565b9150509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156200087b576200087b6200084f565b92915050565b6000600182016200089657620008966200084f565b5060010190565b80820281158282048414176200087b576200087b6200084f565b600082620008d557634e487b7160e01b600052601260045260246000fd5b500490565b61ffff818116838216019080821115620008f857620008f86200084f565b5092915050565b614380806200090f6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806374e6310e11610151578063b9111169116100c3578063e17f212e11610087578063e17f212e1461069a578063ef88bf13146106ae578063f5a98383146106c1578063faae7fc9146106c9578063fd587daf146106dc578063fff50753146106ef57600080fd5b8063b911116914610628578063c452e47f14610649578063cc8356ca1461066b578063d5e50a631461067e578063debfda301461068757600080fd5b806392e3e45f1161011557806392e3e45f1461057e5780639508858e14610592578063987a4500146105cf578063aeacaa6f146105ef578063b00c0b7614610602578063b61b57fa1461061557600080fd5b806374e6310e146104ef5780637c2cb921146105105780638c645728146105235780638e467784146105585780638f7d09571461056b57600080fd5b806344b571d9116101ea5780635267a15d116101ae5780635267a15d146104615780635aa6e675146104885780635ff270791461049057806362354e03146104a357806367fc4029146104b65780636ddcd4bc146104c957600080fd5b806344b571d9146103a0578063457c2e47146103dd5780634f5a9968146103f057806350b1d61b1461043b578063521318231461044e57600080fd5b80633399408111610231578063339940811461030b578063369e94341461032c57806339661f5f1461034c5780633c5cb76f1461036d578063448436b11461038d57600080fd5b806317da6b311461026e57806318d1812d1461028357806328be8e3a1461029657806329a2e5ed146102c05780632cc2c0f6146102e0575b600080fd5b61028161027c366004613555565b61070f565b005b610281610291366004613587565b610766565b6102a96102a43660046135a4565b6107ef565b6040516102b7929190613601565b60405180910390f35b6102d36102ce3660046135a4565b610926565b6040516102b79190613658565b600a546102f3906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b61031e61031936600461366b565b6109f4565b6040519081526020016102b7565b61031e61033a3660046135a4565b60009081526005602052604090205490565b61035f61035a3660046135a4565b610a37565b6040516102b79291906136c7565b61031e61037b366004613702565b60046020526000908152604090205481565b61028161039b366004613587565b610b0a565b6103b36103ae36600461371f565b610b57565b60408051948552602085019390935261ffff918216928401929092521660608201526080016102b7565b6102d36103eb3660046135a4565b610d6e565b61042b6103fe36600461366b565b60009081526005602090815260408083206001600160a01b03949094168352600190930190522054151590565b60405190151581526020016102b7565b6008546102f3906001600160a01b031681565b61028161045c3660046135a4565b610dda565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102f3565b6102f3610e5f565b61028161049e36600461374f565b610efb565b6000546102f3906001600160a01b031681565b6102816104c436600461374f565b611181565b6104dc6104d736600461366b565b61125d565b60405161ffff90911681526020016102b7565b6105026104fd36600461374f565b6112ef565b6040516102b79291906137c9565b6102d361051e3660046135a4565b611394565b61053661053136600461371f565b611417565b604080516001600160a01b03909316835261ffff9091166020830152016102b7565b6009546102f3906001600160a01b031681565b6102816105793660046137ea565b611596565b600a5461042b90600160a01b900460ff1681565b6105a56105a03660046135a4565b6116a2565b604080516001600160801b03909416845261ffff92831660208501529116908201526060016102b7565b6105e26105dd3660046135a4565b6116fb565b6040516102b7919061382b565b61031e6105fd3660046138bf565b61181e565b610281610610366004613a16565b6119c6565b6102d36106233660046135a4565b611aa5565b61063b6106363660046135a4565b611b28565b6040516102b7929190613b02565b61065c6106573660046135a4565b611cac565b6040516102b793929190613b27565b6102d36106793660046135a4565b61218d565b61031e60035481565b61042b610695366004613587565b61226b565b60005461042b90600160a81b900460ff1681565b6102816106bc366004613b61565b6122ee565b610281612454565b6007546102f3906001600160a01b031681565b6102816106ea3660046135a4565b61251a565b61031e6106fd3660046135a4565b60066020526000908152604090205481565b600054600160b01b900460ff16806107315750600054600160a81b900460ff16155b156107585761073e612655565b600a805460ff60a01b1916600160a01b8315150217905550565b61076360003661268f565b50565b600a546001600160a01b031633146107cf5760405162461bcd60e51b815260206004820152602160248201527f6f6e6c792073797374656d20726567697374726174696f6e20636f6e747261636044820152601d60fa1b60648201526084015b60405180910390fd5b6000806107db836127db565b915091506107ea838383612a86565b505050565b600081815260056020908152604091829020805483518184028101840190945280845260609384939091839183018282801561085457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610836575b5050835193965083925050506001600160401b0381111561087757610877613939565b6040519080825280602002602001820160405280156108a0578160200160208202803683370190505b50925060005b8181101561091e578260010160008683815181106108c6576108c6613b8f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205484828151811061090157610901613b8f565b60209081029190910101528061091681613bbb565b9150506108a6565b505050915091565b6000818152600560205260409020600201546060906001600160801b03166109605760405162461bcd60e51b81526004016107c690613bd4565b60085460008381526005602090815260408083206006909252918290205491516369fe610d60e01b81526001600160a01b03909316926369fe610d926109a99291600401613c49565b600060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613c6b565b92915050565b60008181526005602090815260408083206001600160a01b0386168452600101909152902054806109ee5760405162461bcd60e51b81526004016107c690613d04565b60008181526005602052604090206002015460609081906001600160801b0316610a735760405162461bcd60e51b81526004016107c690613bd4565b600854600084815260056020908152604080832060069092529182902054915163bda9a28b60e01b81526001600160a01b039093169263bda9a28b92610abc9291600401613c49565b600060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b019190810190613d8d565b91509150915091565b600054600160b01b900460ff1680610b2c5750600054600160a81b900460ff16155b1561075857610b39612655565b600a80546001600160a01b0319166001600160a01b03831617905550565b60008281526005602052604081206002810154829182918291906001600160801b031680610b975760405162461bcd60e51b81526004016107c690613bd4565b60008881526006602052604080822054600854915163385e3b1360e21b81526001600160a01b038b8116600483015260248201839052919392919091169063e178ec4c90604401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613de6565b9050886001600160a01b0316816001600160a01b031603610c825760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964207369676e696e6720706f6c6963792061646472657373000060448201526064016107c6565b6001600160a01b038116600090815260018501602052604090205480610cba5760405162461bcd60e51b81526004016107c690613d04565b83610cc761ffff83613e03565b610cd19190613e1a565b600854604051631110456160e01b81526001600160a01b038581166004830152602482018790529299509116906311104561906044016040805180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613e3c565b60029690960154909c959b509699505050600160901b90940461ffff169550909350505050565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610dce57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db0575b50505050509050919050565b6007546001600160a01b03163314610e305760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b60008181526006602052604090205415610e4c57610e4c613e60565b6000908152600660205260409020439055565b60008054600160a81b900460ff16610e8157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190613de6565b905090565b610f043361226b565b610f405760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016107c6565b6001600160e01b0319811660009081526002602052604081208054909103610faa5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b8054421015610ffb5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016107c6565b600081600101805461100c90613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461103890613e76565b80156110855780601f1061105a57610100808354040283529160200191611085565b820191906000526020600020905b81548152906001019060200180831161106857829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506110b760018301826134f9565b50506000805460ff60b01b1916600160b01b17815560405130906110dc908490613eb0565b6000604051808303816000865af19150503d8060008114611119576040519150601f19603f3d011682016040523d82523d6000602084013e61111e565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161117b816130e2565b50505050565b6111896130ff565b6001600160e01b0319811660009081526002602052604081205490036111f15760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906107ea60018301826134f9565b600081815260056020526040812060028101546001600160801b0316806112965760405162461bcd60e51b81526004016107c690613bd4565b6001600160a01b0385166000908152600183016020526040902054806112ce5760405162461bcd60e51b81526004016107c690613d04565b816112db61ffff83613e03565b6112e59190613e1a565b9695505050505050565b6002602052600090815260409020805460018201805491929161131190613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461133d90613e76565b801561138a5780601f1061135f5761010080835404028352916020019161138a565b820191906000526020600020905b81548152906001019060200180831161136d57829003601f168201915b5050505050905082565b6000818152600560205260409020600201546060906001600160801b03166113ce5760405162461bcd60e51b81526004016107c690613bd4565b6008546000838152600560209081526040808320600690925291829020549151631594a52760e21b81526001600160a01b0390931692635652949c926109a99291600401613c49565b600082815260056020526040812060028101548291906001600160801b0316806114535760405162461bcd60e51b81526004016107c690613bd4565b6008546000878152600660205260409081902054905163385e3b1360e21b81526001600160a01b038881166004830152602482019290925291169063e178ec4c90604401602060405180830381865afa1580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613de6565b9350846001600160a01b0316846001600160a01b03160361153b5760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964207369676e696e6720706f6c6963792061646472657373000060448201526064016107c6565b6001600160a01b0384166000908152600183016020526040902054806115735760405162461bcd60e51b81526004016107c690613d04565b8161158061ffff83613e03565b61158a9190613e1a565b93505050509250929050565b6000806115a2846127db565b6040805162ffffff84166020808301919091526001600160a01b03891682840152825180830384018152606090920190925280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81209395509193509190506000611633826116246020890189613ecc565b88602001358960400135613159565b905083604001516001600160a01b0316816001600160a01b03161461168e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016107c6565b611699878686612a86565b50505050505050565b600081815260056020526040902060028101546001600160801b0381169161ffff600160801b8304811692600160901b90041690836116f35760405162461bcd60e51b81526004016107c690613bd4565b509193909250565b6000818152600560205260409020600201546060906001600160801b03166117355760405162461bcd60e51b81526004016107c690613bd4565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b03938416936305b232c893169063c263221690602401602060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613eef565b6040518363ffffffff1660e01b81526004016117d9929190613f18565b600060405180830381865afa1580156117f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613f43565b60008054600160b01b900460ff16806118415750600054600160a81b900460ff16155b156119b45761184e612655565b60075460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc9190614055565b62ffffff1690506118cd838261407a565b6118d890600161407a565b915060005b848110156119ad5782600460008888858181106118fc576118fc613b8f565b90506020020160208101906119119190613702565b6001600160601b031916815260208101919091526040016000205585858281811061193e5761193e613b8f565b90506020020160208101906119539190613702565b6bffffffffffffffffffffffff19167f0a5e087b026d8f1c57e75d9d0cb0394c2ad3535e7a15d97d553be80476274cd08460405161199391815260200190565b60405180910390a2806119a581613bbb565b9150506118dd565b50506119bf565b6119bf60003661268f565b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614611a3f5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016107c6565b611a97611a7383836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613187565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b611aa18282613262565b5050565b6000818152600560205260409020600201546060906001600160801b0316611adf5760405162461bcd60e51b81526004016107c690613bd4565b6008546000838152600560209081526040808320600690925291829020549151636558b56b60e01b81526001600160a01b0390931692636558b56b926109a99291600401613c49565b6000818152600560205260409020600281015460609182916001600160801b031680611b665760405162461bcd60e51b81526004016107c690613bd4565b815460408051602080840282018101909252828152918491830182828015611bb757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b99575b5050835193975083925050506001600160401b03811115611bda57611bda613939565b604051908082528060200260200182016040528015611c03578160200160208202803683370190505b50935060005b81811015611ca3578261ffff8016856001016000898581518110611c2f57611c2f613b8f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611c629190613e03565b611c6c9190613e1a565b858281518110611c7e57611c7e613b8f565b61ffff9092166020928302919091019091015280611c9b81613bbb565b915050611c09565b50505050915091565b60075460609081906000906001600160a01b03163314611d0a5760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b6000848152600560205260409020805480611d2757611d27613e60565b6000816001600160401b03811115611d4157611d41613939565b604051908082528060200260200182016040528015611d6a578160200160208202803683370190505b5090506000826001600160401b03811115611d8757611d87613939565b604051908082528060200260200182016040528015611db0578160200160208202803683370190505b5090506000805b84811015611ebc57856000018181548110611dd457611dd4613b8f565b9060005260206000200160009054906101000a90046001600160a01b0316848281518110611e0457611e04613b8f565b60200260200101906001600160a01b031690816001600160a01b031681525050856001016000858381518110611e3c57611e3c613b8f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110611e7757611e77613b8f565b602002602001018181525050828181518110611e9557611e95613b8f565b602002602001015182611ea8919061407a565b915080611eb481613bbb565b915050611db7565b5060085460008a815260066020526040908190205490516369fe610d60e01b81526001600160a01b03909216916369fe610d91611efe9187919060040161408d565b600060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f439190810190613c6b565b60085460008b81526006602052604080822054905163bda9a28b60e01b8152939b50909283926001600160a01b03169163bda9a28b91611f8791899160040161408d565b600060405180830381865afa158015611fa4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fcc9190810190613d8d565b91509150856001600160401b03811115611fe857611fe8613939565b604051908082528060200260200182016040528015612011578160200160208202803683370190505b5098506000805b87811015612129578461ffff801687838151811061203857612038613b8f565b602002602001015161204a9190613e03565b6120549190613e1a565b8b828151811061206657612066613b8f565b602002602001019061ffff16908161ffff16815250508a818151811061208e5761208e613b8f565b60200260200101518a6120a191906140a0565b99506000801b8482815181106120b9576120b9613b8f565b60200260200101511415806120ea57506000801b8382815181106120df576120df613b8f565b602002602001015114155b15612117578a818151811061210157612101613b8f565b60200260200101518261211491906140a0565b91505b8061212181613bbb565b915050612018565b506002909701805461ffff988916600160901b0261ffff60901b19998b16600160801b0271ffffffffffffffffffffffffffffffffffff199092166001600160801b0390961695909517179790971692909217909555509597949650929450505050565b6000818152600560205260409020600201546060906001600160801b03166121c75760405162461bcd60e51b81526004016107c690613bd4565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b039384169363df7c7c6893169063c263221690602401602060405180830381865afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e9190613eef565b6040518363ffffffff1660e01b81526004016109a9929190613f18565b60008054600160a01b900460ff1680156109ee5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906140c2565b600054600160a01b900460ff161561233f5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016107c6565b6001600160a01b0382166123955760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016107c6565b6001600160a01b0381166123de5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016107c6565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61245c6130ff565b600054600160a81b900460ff16156124b65760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016107c6565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061253c5750600054600160a81b900460ff16155b1561075857612549612655565b61ffff8111156125915760405162461bcd60e51b81526020600482015260136024820152720bedac2f0acdee8cae4e640e8dede40d0d2ced606b1b60448201526064016107c6565b600760009054906101000a90046001600160a01b03166001600160a01b0316632e3645f86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260891906140df565b61ffff168110156126505760405162461bcd60e51b81526020600482015260126024820152715f6d6178566f7465727320746f6f206c6f7760701b60448201526064016107c6565b600355565b600054600160b01b900460ff16156126855733301461267657612676613e60565b6000805460ff60b01b19169055565b61268d6130ff565b565b6126976130ff565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127079190614103565b90506000612715824261407a565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612793908261416a565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516127cc9493929190614229565b60405180910390a15050505050565b60408051606081018252600080825260208201819052918101829052600760009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190614055565b61287990600161426f565b62ffffff81166000908152600660205260408120549193508190036128e05760405162461bcd60e51b815260206004820152601e60248201527f726567697374726174696f6e206e6f7420617661696c61626c6520796574000060448201526064016107c6565b60085460405163164a335960e31b81526001600160a01b038681166004830152602482018490529091169063b2519ac890604401606060405180830381865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612955919061428b565b9150836001600160a01b031682604001516001600160a01b0316036129bc5760405162461bcd60e51b815260206004820152601e60248201527f7369676e696e6720706f6c6963792061646472657373206e6f7420736574000060448201526064016107c6565b81516001600160a01b03808616911603612a115760405162461bcd60e51b81526020600482015260166024820152751cdd589b5a5d081859191c995cdcc81b9bdd081cd95d60521b60448201526064016107c6565b836001600160a01b031682602001516001600160a01b031603612a805760405162461bcd60e51b815260206004820152602160248201527f7375626d6974207369676e6174757265732061646472657373206e6f742073656044820152601d60fa1b60648201526084016107c6565b50915091565b6007546040516302e074f160e31b815262ffffff8416600482015260009182916001600160a01b0390911690631703a788906024016040805180830381865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906142fc565b9150915081600003612b475760405162461bcd60e51b8152602060048201526015602482015274766f746520706f77657220626c6f636b207a65726f60581b60448201526064016107c6565b80612b945760405162461bcd60e51b815260206004820152601e60248201527f766f74657220726567697374726174696f6e206e6f7420656e61626c6564000060448201526064016107c6565b6008546040516315f6dfbd60e11b81526001600160a01b038781166004830181905260248301869052921690632bedbf7a90604401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190613de6565b6001600160a01b031603612c605760405162461bcd60e51b815260206004820152601a60248201527f64656c65676174696f6e2061646472657373206e6f742073657400000000000060448201526064016107c6565b600954604051635b28c2eb60e11b81526001600160a01b03878116600483015262ffffff8716602483015260448201859052600092169063b65185d6906064016020604051808303816000875af1158015612cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce39190614103565b905060008111612d295760405162461bcd60e51b8152602060048201526011602482015270766f74657220776569676874207a65726f60781b60448201526064016107c6565b60085462ffffff8616600090815260066020526040808220549051631110456160e01b81526001600160a01b038a811660048301526024820192909252919283929116906311104561906044016040805180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613e3c565b600a549193509150600160a01b900460ff168015612dd2575081155b8015612ddc575080155b15612e1f5760405162461bcd60e51b81526020600482015260136024820152721c1d589b1a58c81ad95e481c995c5d5a5c9959606a1b60448201526064016107c6565b62ffffff871660009081526005602090815260408083206001600160a01b038c168452600181019092529091205415612e8f5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016107c6565b8054600354811015612ee1578154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038f16908117909155815290840190915260409020859055613060565b6000600019815b83811015612f55576000856000018281548110612f0757612f07613b8f565b60009182526020808320909101546001600160a01b03168083526001890190915260409091205490915080841115612f40578093508294505b50508080612f4d90613bbb565b915050612ee8565b50868110612f9a5760405162461bcd60e51b8152602060048201526012602482015271766f746520706f77657220746f6f206c6f7760701b60448201526064016107c6565b6000846000018381548110612fb157612fb1613b8f565b60009182526020808320909101546001600160a01b031680835260018801909152604082209190915585549091508d90869085908110612ff357612ff3613b8f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558f8316825260018801905260408082208b90555162ffffff8f16928416917f98a7f87f8e2aa2f23f43769eff67782bb12946384b142d1ce1e8e38e05d9a3e691a35050505b60408089015189516020808c015184516001600160a01b0393841681529083169181019190915292830187905260608301869052608083018890529081169162ffffff8c16918d16907f824bc2cc10bfe21ead60b8c8a90716eb325b9335aa73eaede799abf38fce062c9060a00160405180910390a450505050505050505050565b3d604051818101604052816000823e82156130fb578181f35b8181fd5b613107610e5f565b6001600160a01b0316336001600160a01b03161461268d5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016107c6565b60008060008061316b88888888613371565b92509250925061317b8282613440565b50909695505050505050565b6000808260405160200161319b9190614321565b6040516020818303038152906040528051906020012090506000805b8651811015613213578681815181106131d2576131d2613b8f565b60200260200101518303613201578581815181106131f2576131f2613b8f565b60200260200101519150613213565b8061320b81613bbb565b9150506131b7565b506001600160a01b0381166132595760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016107c6565b95945050505050565b613298828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613187565b600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506132ee82826040518060400160405280600d81526020016c22b73a34ba3ca6b0b730b3b2b960991b815250613187565b600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061334d828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b815250613187565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156133ac5750600091506003905082613436565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613400573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661342c57506000925060019150829050613436565b9250600091508190505b9450945094915050565b600082600381111561345457613454614334565b0361345d575050565b600182600381111561347157613471614334565b0361348f5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134a3576134a3614334565b036134c45760405163fce698f760e01b8152600481018290526024016107c6565b60038260038111156134d8576134d8614334565b03611aa1576040516335e2f38360e21b8152600481018290526024016107c6565b50805461350590613e76565b6000825580601f10613515575050565b601f01602090049060005260206000209081019061076391905b80821115613543576000815560010161352f565b5090565b801515811461076357600080fd5b60006020828403121561356757600080fd5b81356119bf81613547565b6001600160a01b038116811461076357600080fd5b60006020828403121561359957600080fd5b81356119bf81613572565b6000602082840312156135b657600080fd5b5035919050565b600081518084526020808501945080840160005b838110156135f65781516001600160a01b0316875295820195908201906001016135d1565b509495945050505050565b60408152600061361460408301856135bd565b82810360208481019190915284518083528582019282019060005b8181101561364b5784518352938301939183019160010161362f565b5090979650505050505050565b6020815260006119bf60208301846135bd565b6000806040838503121561367e57600080fd5b823561368981613572565b946020939093013593505050565b600081518084526020808501945080840160005b838110156135f6578151875295820195908201906001016136ab565b6040815260006136da6040830185613697565b82810360208401526132598185613697565b6001600160601b03198116811461076357600080fd5b60006020828403121561371457600080fd5b81356119bf816136ec565b6000806040838503121561373257600080fd5b82359150602083013561374481613572565b809150509250929050565b60006020828403121561376157600080fd5b81356001600160e01b0319811681146119bf57600080fd5b60005b8381101561379457818101518382015260200161377c565b50506000910152565b600081518084526137b5816020860160208601613779565b601f01601f19169290920160200192915050565b8281526040602082015260006137e2604083018461379d565b949350505050565b60008082840360808112156137fe57600080fd5b833561380981613572565b92506060601f198201121561381d57600080fd5b506020830190509250929050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b838110156138b157888603603f19018552825180518088529088019088880190845b8181101561389b5783516001600160601b0319168352928a0192918a0191600101613875565b5090975050509386019391860191600101613853565b509398975050505050505050565b6000806000604084860312156138d457600080fd5b83356001600160401b03808211156138eb57600080fd5b818601915086601f8301126138ff57600080fd5b81358181111561390e57600080fd5b8760208260051b850101111561392357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561397757613977613939565b604052919050565b60006001600160401b0382111561399857613998613939565b5060051b60200190565b600082601f8301126139b357600080fd5b813560206139c86139c38361397f565b61394f565b82815260059290921b840181019181810190868411156139e757600080fd5b8286015b84811015613a0b5780356139fe81613572565b83529183019183016139eb565b509695505050505050565b60008060408385031215613a2957600080fd5b82356001600160401b0380821115613a4057600080fd5b818501915085601f830112613a5457600080fd5b81356020613a646139c38361397f565b82815260059290921b84018101918181019089841115613a8357600080fd5b948201945b83861015613aa157853582529482019490820190613a88565b96505086013592505080821115613ab757600080fd5b50613ac4858286016139a2565b9150509250929050565b600081518084526020808501945080840160005b838110156135f657815161ffff1687529582019590820190600101613ae2565b604081526000613b1560408301856135bd565b82810360208401526132598185613ace565b606081526000613b3a60608301866135bd565b8281036020840152613b4c8186613ace565b91505061ffff83166040830152949350505050565b60008060408385031215613b7457600080fd5b8235613b7f81613572565b9150602083013561374481613572565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613bcd57613bcd613ba5565b5060010190565b6020808252601d908201527f7265776172642065706f6368206964206e6f7420737570706f72746564000000604082015260600190565b6000815480845260208085019450836000528060002060005b838110156135f65781546001600160a01b031687529582019560019182019101613c24565b604081526000613c5c6040830185613c0b565b90508260208301529392505050565b60006020808385031215613c7e57600080fd5b82516001600160401b03811115613c9457600080fd5b8301601f81018513613ca557600080fd5b8051613cb36139c38261397f565b81815260059190911b82018301908381019087831115613cd257600080fd5b928401925b82841015613cf9578351613cea81613572565b82529284019290840190613cd7565b979650505050505050565b6020808252601490820152731d9bdd195c881b9bdd081c9959da5cdd195c995960621b604082015260600190565b600082601f830112613d4357600080fd5b81516020613d536139c38361397f565b82815260059290921b84018101918181019086841115613d7257600080fd5b8286015b84811015613a0b5780518352918301918301613d76565b60008060408385031215613da057600080fd5b82516001600160401b0380821115613db757600080fd5b613dc386838701613d32565b93506020850151915080821115613dd957600080fd5b50613ac485828601613d32565b600060208284031215613df857600080fd5b81516119bf81613572565b80820281158282048414176109ee576109ee613ba5565b600082613e3757634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613e4f57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052600160045260246000fd5b600181811c90821680613e8a57607f821691505b602082108103613eaa57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251613ec2818460208701613779565b9190910192915050565b600060208284031215613ede57600080fd5b813560ff811681146119bf57600080fd5b600060208284031215613f0157600080fd5b81516001600160401b03811681146119bf57600080fd5b604081526000613f2b6040830185613c0b565b90506001600160401b03831660208301529392505050565b60006020808385031215613f5657600080fd5b82516001600160401b0380821115613f6d57600080fd5b818501915085601f830112613f8157600080fd5b8151613f8f6139c38261397f565b818152600591821b8401850191858201919089841115613fae57600080fd5b8686015b8481101561404657805186811115613fca5760008081fd5b8701603f81018c13613fdc5760008081fd5b888101516040613fee6139c38361397f565b82815291851b83018101918b8101908f84111561400b5760008081fd5b938201935b838510156140355784519250614025836136ec565b828252938c0193908c0190614010565b885250505093880193508701613fb2565b50909998505050505050505050565b60006020828403121561406757600080fd5b815162ffffff811681146119bf57600080fd5b808201808211156109ee576109ee613ba5565b604081526000613c5c60408301856135bd565b61ffff8181168382160190808211156140bb576140bb613ba5565b5092915050565b6000602082840312156140d457600080fd5b81516119bf81613547565b6000602082840312156140f157600080fd5b815161ffff811681146119bf57600080fd5b60006020828403121561411557600080fd5b5051919050565b601f8211156107ea57600081815260208120601f850160051c810160208610156141435750805b601f850160051c820191505b818110156141625782815560010161414f565b505050505050565b81516001600160401b0381111561418357614183613939565b614197816141918454613e76565b8461411c565b602080601f8311600181146141cc57600084156141b45750858301515b600019600386901b1c1916600185901b178555614162565b600085815260208120601f198616915b828110156141fb578886015182559484019460019091019084016141dc565b50858210156142195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b62ffffff8181168382160190808211156140bb576140bb613ba5565b60006060828403121561429d57600080fd5b604051606081018181106001600160401b03821117156142bf576142bf613939565b60405282516142cd81613572565b815260208301516142dd81613572565b602082015260408301516142f081613572565b60408201529392505050565b6000806040838503121561430f57600080fd5b82519150602083015161374481613547565b6020815260006119bf602083018461379d565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200760044682c80809f36dc85732a8a123a48e7d0dca7b27ba5bd0cd21207c840664736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102695760003560e01c806374e6310e11610151578063b9111169116100c3578063e17f212e11610087578063e17f212e1461069a578063ef88bf13146106ae578063f5a98383146106c1578063faae7fc9146106c9578063fd587daf146106dc578063fff50753146106ef57600080fd5b8063b911116914610628578063c452e47f14610649578063cc8356ca1461066b578063d5e50a631461067e578063debfda301461068757600080fd5b806392e3e45f1161011557806392e3e45f1461057e5780639508858e14610592578063987a4500146105cf578063aeacaa6f146105ef578063b00c0b7614610602578063b61b57fa1461061557600080fd5b806374e6310e146104ef5780637c2cb921146105105780638c645728146105235780638e467784146105585780638f7d09571461056b57600080fd5b806344b571d9116101ea5780635267a15d116101ae5780635267a15d146104615780635aa6e675146104885780635ff270791461049057806362354e03146104a357806367fc4029146104b65780636ddcd4bc146104c957600080fd5b806344b571d9146103a0578063457c2e47146103dd5780634f5a9968146103f057806350b1d61b1461043b578063521318231461044e57600080fd5b80633399408111610231578063339940811461030b578063369e94341461032c57806339661f5f1461034c5780633c5cb76f1461036d578063448436b11461038d57600080fd5b806317da6b311461026e57806318d1812d1461028357806328be8e3a1461029657806329a2e5ed146102c05780632cc2c0f6146102e0575b600080fd5b61028161027c366004613555565b61070f565b005b610281610291366004613587565b610766565b6102a96102a43660046135a4565b6107ef565b6040516102b7929190613601565b60405180910390f35b6102d36102ce3660046135a4565b610926565b6040516102b79190613658565b600a546102f3906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b61031e61031936600461366b565b6109f4565b6040519081526020016102b7565b61031e61033a3660046135a4565b60009081526005602052604090205490565b61035f61035a3660046135a4565b610a37565b6040516102b79291906136c7565b61031e61037b366004613702565b60046020526000908152604090205481565b61028161039b366004613587565b610b0a565b6103b36103ae36600461371f565b610b57565b60408051948552602085019390935261ffff918216928401929092521660608201526080016102b7565b6102d36103eb3660046135a4565b610d6e565b61042b6103fe36600461366b565b60009081526005602090815260408083206001600160a01b03949094168352600190930190522054151590565b60405190151581526020016102b7565b6008546102f3906001600160a01b031681565b61028161045c3660046135a4565b610dda565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102f3565b6102f3610e5f565b61028161049e36600461374f565b610efb565b6000546102f3906001600160a01b031681565b6102816104c436600461374f565b611181565b6104dc6104d736600461366b565b61125d565b60405161ffff90911681526020016102b7565b6105026104fd36600461374f565b6112ef565b6040516102b79291906137c9565b6102d361051e3660046135a4565b611394565b61053661053136600461371f565b611417565b604080516001600160a01b03909316835261ffff9091166020830152016102b7565b6009546102f3906001600160a01b031681565b6102816105793660046137ea565b611596565b600a5461042b90600160a01b900460ff1681565b6105a56105a03660046135a4565b6116a2565b604080516001600160801b03909416845261ffff92831660208501529116908201526060016102b7565b6105e26105dd3660046135a4565b6116fb565b6040516102b7919061382b565b61031e6105fd3660046138bf565b61181e565b610281610610366004613a16565b6119c6565b6102d36106233660046135a4565b611aa5565b61063b6106363660046135a4565b611b28565b6040516102b7929190613b02565b61065c6106573660046135a4565b611cac565b6040516102b793929190613b27565b6102d36106793660046135a4565b61218d565b61031e60035481565b61042b610695366004613587565b61226b565b60005461042b90600160a81b900460ff1681565b6102816106bc366004613b61565b6122ee565b610281612454565b6007546102f3906001600160a01b031681565b6102816106ea3660046135a4565b61251a565b61031e6106fd3660046135a4565b60066020526000908152604090205481565b600054600160b01b900460ff16806107315750600054600160a81b900460ff16155b156107585761073e612655565b600a805460ff60a01b1916600160a01b8315150217905550565b61076360003661268f565b50565b600a546001600160a01b031633146107cf5760405162461bcd60e51b815260206004820152602160248201527f6f6e6c792073797374656d20726567697374726174696f6e20636f6e747261636044820152601d60fa1b60648201526084015b60405180910390fd5b6000806107db836127db565b915091506107ea838383612a86565b505050565b600081815260056020908152604091829020805483518184028101840190945280845260609384939091839183018282801561085457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610836575b5050835193965083925050506001600160401b0381111561087757610877613939565b6040519080825280602002602001820160405280156108a0578160200160208202803683370190505b50925060005b8181101561091e578260010160008683815181106108c6576108c6613b8f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205484828151811061090157610901613b8f565b60209081029190910101528061091681613bbb565b9150506108a6565b505050915091565b6000818152600560205260409020600201546060906001600160801b03166109605760405162461bcd60e51b81526004016107c690613bd4565b60085460008381526005602090815260408083206006909252918290205491516369fe610d60e01b81526001600160a01b03909316926369fe610d926109a99291600401613c49565b600060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613c6b565b92915050565b60008181526005602090815260408083206001600160a01b0386168452600101909152902054806109ee5760405162461bcd60e51b81526004016107c690613d04565b60008181526005602052604090206002015460609081906001600160801b0316610a735760405162461bcd60e51b81526004016107c690613bd4565b600854600084815260056020908152604080832060069092529182902054915163bda9a28b60e01b81526001600160a01b039093169263bda9a28b92610abc9291600401613c49565b600060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b019190810190613d8d565b91509150915091565b600054600160b01b900460ff1680610b2c5750600054600160a81b900460ff16155b1561075857610b39612655565b600a80546001600160a01b0319166001600160a01b03831617905550565b60008281526005602052604081206002810154829182918291906001600160801b031680610b975760405162461bcd60e51b81526004016107c690613bd4565b60008881526006602052604080822054600854915163385e3b1360e21b81526001600160a01b038b8116600483015260248201839052919392919091169063e178ec4c90604401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613de6565b9050886001600160a01b0316816001600160a01b031603610c825760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964207369676e696e6720706f6c6963792061646472657373000060448201526064016107c6565b6001600160a01b038116600090815260018501602052604090205480610cba5760405162461bcd60e51b81526004016107c690613d04565b83610cc761ffff83613e03565b610cd19190613e1a565b600854604051631110456160e01b81526001600160a01b038581166004830152602482018790529299509116906311104561906044016040805180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613e3c565b60029690960154909c959b509699505050600160901b90940461ffff169550909350505050565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610dce57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db0575b50505050509050919050565b6007546001600160a01b03163314610e305760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b60008181526006602052604090205415610e4c57610e4c613e60565b6000908152600660205260409020439055565b60008054600160a81b900460ff16610e8157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190613de6565b905090565b610f043361226b565b610f405760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064016107c6565b6001600160e01b0319811660009081526002602052604081208054909103610faa5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b8054421015610ffb5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f776564207965740000000000000060448201526064016107c6565b600081600101805461100c90613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461103890613e76565b80156110855780601f1061105a57610100808354040283529160200191611085565b820191906000526020600020905b81548152906001019060200180831161106857829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506110b760018301826134f9565b50506000805460ff60b01b1916600160b01b17815560405130906110dc908490613eb0565b6000604051808303816000865af19150503d8060008114611119576040519150601f19603f3d011682016040523d82523d6000602084013e61111e565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161117b816130e2565b50505050565b6111896130ff565b6001600160e01b0319811660009081526002602052604081205490036111f15760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f7200000000000060448201526064016107c6565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b031981166000908152600260205260408120818155906107ea60018301826134f9565b600081815260056020526040812060028101546001600160801b0316806112965760405162461bcd60e51b81526004016107c690613bd4565b6001600160a01b0385166000908152600183016020526040902054806112ce5760405162461bcd60e51b81526004016107c690613d04565b816112db61ffff83613e03565b6112e59190613e1a565b9695505050505050565b6002602052600090815260409020805460018201805491929161131190613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461133d90613e76565b801561138a5780601f1061135f5761010080835404028352916020019161138a565b820191906000526020600020905b81548152906001019060200180831161136d57829003601f168201915b5050505050905082565b6000818152600560205260409020600201546060906001600160801b03166113ce5760405162461bcd60e51b81526004016107c690613bd4565b6008546000838152600560209081526040808320600690925291829020549151631594a52760e21b81526001600160a01b0390931692635652949c926109a99291600401613c49565b600082815260056020526040812060028101548291906001600160801b0316806114535760405162461bcd60e51b81526004016107c690613bd4565b6008546000878152600660205260409081902054905163385e3b1360e21b81526001600160a01b038881166004830152602482019290925291169063e178ec4c90604401602060405180830381865afa1580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613de6565b9350846001600160a01b0316846001600160a01b03160361153b5760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964207369676e696e6720706f6c6963792061646472657373000060448201526064016107c6565b6001600160a01b0384166000908152600183016020526040902054806115735760405162461bcd60e51b81526004016107c690613d04565b8161158061ffff83613e03565b61158a9190613e1a565b93505050509250929050565b6000806115a2846127db565b6040805162ffffff84166020808301919091526001600160a01b03891682840152825180830384018152606090920190925280519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81209395509193509190506000611633826116246020890189613ecc565b88602001358960400135613159565b905083604001516001600160a01b0316816001600160a01b03161461168e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016107c6565b611699878686612a86565b50505050505050565b600081815260056020526040902060028101546001600160801b0381169161ffff600160801b8304811692600160901b90041690836116f35760405162461bcd60e51b81526004016107c690613bd4565b509193909250565b6000818152600560205260409020600201546060906001600160801b03166117355760405162461bcd60e51b81526004016107c690613bd4565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b03938416936305b232c893169063c263221690602401602060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613eef565b6040518363ffffffff1660e01b81526004016117d9929190613f18565b600060405180830381865afa1580156117f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ee9190810190613f43565b60008054600160b01b900460ff16806118415750600054600160a81b900460ff16155b156119b45761184e612655565b60075460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc9190614055565b62ffffff1690506118cd838261407a565b6118d890600161407a565b915060005b848110156119ad5782600460008888858181106118fc576118fc613b8f565b90506020020160208101906119119190613702565b6001600160601b031916815260208101919091526040016000205585858281811061193e5761193e613b8f565b90506020020160208101906119539190613702565b6bffffffffffffffffffffffff19167f0a5e087b026d8f1c57e75d9d0cb0394c2ad3535e7a15d97d553be80476274cd08460405161199391815260200190565b60405180910390a2806119a581613bbb565b9150506118dd565b50506119bf565b6119bf60003661268f565b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614611a3f5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b60448201526064016107c6565b611a97611a7383836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613187565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b611aa18282613262565b5050565b6000818152600560205260409020600201546060906001600160801b0316611adf5760405162461bcd60e51b81526004016107c690613bd4565b6008546000838152600560209081526040808320600690925291829020549151636558b56b60e01b81526001600160a01b0390931692636558b56b926109a99291600401613c49565b6000818152600560205260409020600281015460609182916001600160801b031680611b665760405162461bcd60e51b81526004016107c690613bd4565b815460408051602080840282018101909252828152918491830182828015611bb757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b99575b5050835193975083925050506001600160401b03811115611bda57611bda613939565b604051908082528060200260200182016040528015611c03578160200160208202803683370190505b50935060005b81811015611ca3578261ffff8016856001016000898581518110611c2f57611c2f613b8f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611c629190613e03565b611c6c9190613e1a565b858281518110611c7e57611c7e613b8f565b61ffff9092166020928302919091019091015280611c9b81613bbb565b915050611c09565b50505050915091565b60075460609081906000906001600160a01b03163314611d0a5760405162461bcd60e51b815260206004820152601960248201527837b7363c90333630b9329039bcb9ba32b69036b0b730b3b2b960391b60448201526064016107c6565b6000848152600560205260409020805480611d2757611d27613e60565b6000816001600160401b03811115611d4157611d41613939565b604051908082528060200260200182016040528015611d6a578160200160208202803683370190505b5090506000826001600160401b03811115611d8757611d87613939565b604051908082528060200260200182016040528015611db0578160200160208202803683370190505b5090506000805b84811015611ebc57856000018181548110611dd457611dd4613b8f565b9060005260206000200160009054906101000a90046001600160a01b0316848281518110611e0457611e04613b8f565b60200260200101906001600160a01b031690816001600160a01b031681525050856001016000858381518110611e3c57611e3c613b8f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054838281518110611e7757611e77613b8f565b602002602001018181525050828181518110611e9557611e95613b8f565b602002602001015182611ea8919061407a565b915080611eb481613bbb565b915050611db7565b5060085460008a815260066020526040908190205490516369fe610d60e01b81526001600160a01b03909216916369fe610d91611efe9187919060040161408d565b600060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f439190810190613c6b565b60085460008b81526006602052604080822054905163bda9a28b60e01b8152939b50909283926001600160a01b03169163bda9a28b91611f8791899160040161408d565b600060405180830381865afa158015611fa4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fcc9190810190613d8d565b91509150856001600160401b03811115611fe857611fe8613939565b604051908082528060200260200182016040528015612011578160200160208202803683370190505b5098506000805b87811015612129578461ffff801687838151811061203857612038613b8f565b602002602001015161204a9190613e03565b6120549190613e1a565b8b828151811061206657612066613b8f565b602002602001019061ffff16908161ffff16815250508a818151811061208e5761208e613b8f565b60200260200101518a6120a191906140a0565b99506000801b8482815181106120b9576120b9613b8f565b60200260200101511415806120ea57506000801b8382815181106120df576120df613b8f565b602002602001015114155b15612117578a818151811061210157612101613b8f565b60200260200101518261211491906140a0565b91505b8061212181613bbb565b915050612018565b506002909701805461ffff988916600160901b0261ffff60901b19998b16600160801b0271ffffffffffffffffffffffffffffffffffff199092166001600160801b0390961695909517179790971692909217909555509597949650929450505050565b6000818152600560205260409020600201546060906001600160801b03166121c75760405162461bcd60e51b81526004016107c690613bd4565b600854600083815260056020526040908190206007549151636131910b60e11b8152600481018690526001600160a01b039384169363df7c7c6893169063c263221690602401602060405180830381865afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e9190613eef565b6040518363ffffffff1660e01b81526004016109a9929190613f18565b60008054600160a01b900460ff1680156109ee5750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906140c2565b600054600160a01b900460ff161561233f5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b60448201526064016107c6565b6001600160a01b0382166123955760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016107c6565b6001600160a01b0381166123de5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016107c6565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61245c6130ff565b600054600160a81b900460ff16156124b65760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f646500000000000060448201526064016107c6565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff168061253c5750600054600160a81b900460ff16155b1561075857612549612655565b61ffff8111156125915760405162461bcd60e51b81526020600482015260136024820152720bedac2f0acdee8cae4e640e8dede40d0d2ced606b1b60448201526064016107c6565b600760009054906101000a90046001600160a01b03166001600160a01b0316632e3645f86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260891906140df565b61ffff168110156126505760405162461bcd60e51b81526020600482015260126024820152715f6d6178566f7465727320746f6f206c6f7760701b60448201526064016107c6565b600355565b600054600160b01b900460ff16156126855733301461267657612676613e60565b6000805460ff60b01b19169055565b61268d6130ff565b565b6126976130ff565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127079190614103565b90506000612715824261407a565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612793908261416a565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516127cc9493929190614229565b60405180910390a15050505050565b60408051606081018252600080825260208201819052918101829052600760009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190614055565b61287990600161426f565b62ffffff81166000908152600660205260408120549193508190036128e05760405162461bcd60e51b815260206004820152601e60248201527f726567697374726174696f6e206e6f7420617661696c61626c6520796574000060448201526064016107c6565b60085460405163164a335960e31b81526001600160a01b038681166004830152602482018490529091169063b2519ac890604401606060405180830381865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612955919061428b565b9150836001600160a01b031682604001516001600160a01b0316036129bc5760405162461bcd60e51b815260206004820152601e60248201527f7369676e696e6720706f6c6963792061646472657373206e6f7420736574000060448201526064016107c6565b81516001600160a01b03808616911603612a115760405162461bcd60e51b81526020600482015260166024820152751cdd589b5a5d081859191c995cdcc81b9bdd081cd95d60521b60448201526064016107c6565b836001600160a01b031682602001516001600160a01b031603612a805760405162461bcd60e51b815260206004820152602160248201527f7375626d6974207369676e6174757265732061646472657373206e6f742073656044820152601d60fa1b60648201526084016107c6565b50915091565b6007546040516302e074f160e31b815262ffffff8416600482015260009182916001600160a01b0390911690631703a788906024016040805180830381865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906142fc565b9150915081600003612b475760405162461bcd60e51b8152602060048201526015602482015274766f746520706f77657220626c6f636b207a65726f60581b60448201526064016107c6565b80612b945760405162461bcd60e51b815260206004820152601e60248201527f766f74657220726567697374726174696f6e206e6f7420656e61626c6564000060448201526064016107c6565b6008546040516315f6dfbd60e11b81526001600160a01b038781166004830181905260248301869052921690632bedbf7a90604401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190613de6565b6001600160a01b031603612c605760405162461bcd60e51b815260206004820152601a60248201527f64656c65676174696f6e2061646472657373206e6f742073657400000000000060448201526064016107c6565b600954604051635b28c2eb60e11b81526001600160a01b03878116600483015262ffffff8716602483015260448201859052600092169063b65185d6906064016020604051808303816000875af1158015612cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce39190614103565b905060008111612d295760405162461bcd60e51b8152602060048201526011602482015270766f74657220776569676874207a65726f60781b60448201526064016107c6565b60085462ffffff8616600090815260066020526040808220549051631110456160e01b81526001600160a01b038a811660048301526024820192909252919283929116906311104561906044016040805180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613e3c565b600a549193509150600160a01b900460ff168015612dd2575081155b8015612ddc575080155b15612e1f5760405162461bcd60e51b81526020600482015260136024820152721c1d589b1a58c81ad95e481c995c5d5a5c9959606a1b60448201526064016107c6565b62ffffff871660009081526005602090815260408083206001600160a01b038c168452600181019092529091205415612e8f5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016107c6565b8054600354811015612ee1578154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038f16908117909155815290840190915260409020859055613060565b6000600019815b83811015612f55576000856000018281548110612f0757612f07613b8f565b60009182526020808320909101546001600160a01b03168083526001890190915260409091205490915080841115612f40578093508294505b50508080612f4d90613bbb565b915050612ee8565b50868110612f9a5760405162461bcd60e51b8152602060048201526012602482015271766f746520706f77657220746f6f206c6f7760701b60448201526064016107c6565b6000846000018381548110612fb157612fb1613b8f565b60009182526020808320909101546001600160a01b031680835260018801909152604082209190915585549091508d90869085908110612ff357612ff3613b8f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558f8316825260018801905260408082208b90555162ffffff8f16928416917f98a7f87f8e2aa2f23f43769eff67782bb12946384b142d1ce1e8e38e05d9a3e691a35050505b60408089015189516020808c015184516001600160a01b0393841681529083169181019190915292830187905260608301869052608083018890529081169162ffffff8c16918d16907f824bc2cc10bfe21ead60b8c8a90716eb325b9335aa73eaede799abf38fce062c9060a00160405180910390a450505050505050505050565b3d604051818101604052816000823e82156130fb578181f35b8181fd5b613107610e5f565b6001600160a01b0316336001600160a01b03161461268d5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b60448201526064016107c6565b60008060008061316b88888888613371565b92509250925061317b8282613440565b50909695505050505050565b6000808260405160200161319b9190614321565b6040516020818303038152906040528051906020012090506000805b8651811015613213578681815181106131d2576131d2613b8f565b60200260200101518303613201578581815181106131f2576131f2613b8f565b60200260200101519150613213565b8061320b81613bbb565b9150506131b7565b506001600160a01b0381166132595760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b60448201526064016107c6565b95945050505050565b613298828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613187565b600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506132ee82826040518060400160405280600d81526020016c22b73a34ba3ca6b0b730b3b2b960991b815250613187565b600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061334d828260405180604001604052806016815260200175233630b932a9bcb9ba32b6b9a1b0b631bab630ba37b960511b815250613187565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156133ac5750600091506003905082613436565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613400573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661342c57506000925060019150829050613436565b9250600091508190505b9450945094915050565b600082600381111561345457613454614334565b0361345d575050565b600182600381111561347157613471614334565b0361348f5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156134a3576134a3614334565b036134c45760405163fce698f760e01b8152600481018290526024016107c6565b60038260038111156134d8576134d8614334565b03611aa1576040516335e2f38360e21b8152600481018290526024016107c6565b50805461350590613e76565b6000825580601f10613515575050565b601f01602090049060005260206000209081019061076391905b80821115613543576000815560010161352f565b5090565b801515811461076357600080fd5b60006020828403121561356757600080fd5b81356119bf81613547565b6001600160a01b038116811461076357600080fd5b60006020828403121561359957600080fd5b81356119bf81613572565b6000602082840312156135b657600080fd5b5035919050565b600081518084526020808501945080840160005b838110156135f65781516001600160a01b0316875295820195908201906001016135d1565b509495945050505050565b60408152600061361460408301856135bd565b82810360208481019190915284518083528582019282019060005b8181101561364b5784518352938301939183019160010161362f565b5090979650505050505050565b6020815260006119bf60208301846135bd565b6000806040838503121561367e57600080fd5b823561368981613572565b946020939093013593505050565b600081518084526020808501945080840160005b838110156135f6578151875295820195908201906001016136ab565b6040815260006136da6040830185613697565b82810360208401526132598185613697565b6001600160601b03198116811461076357600080fd5b60006020828403121561371457600080fd5b81356119bf816136ec565b6000806040838503121561373257600080fd5b82359150602083013561374481613572565b809150509250929050565b60006020828403121561376157600080fd5b81356001600160e01b0319811681146119bf57600080fd5b60005b8381101561379457818101518382015260200161377c565b50506000910152565b600081518084526137b5816020860160208601613779565b601f01601f19169290920160200192915050565b8281526040602082015260006137e2604083018461379d565b949350505050565b60008082840360808112156137fe57600080fd5b833561380981613572565b92506060601f198201121561381d57600080fd5b506020830190509250929050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b838110156138b157888603603f19018552825180518088529088019088880190845b8181101561389b5783516001600160601b0319168352928a0192918a0191600101613875565b5090975050509386019391860191600101613853565b509398975050505050505050565b6000806000604084860312156138d457600080fd5b83356001600160401b03808211156138eb57600080fd5b818601915086601f8301126138ff57600080fd5b81358181111561390e57600080fd5b8760208260051b850101111561392357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561397757613977613939565b604052919050565b60006001600160401b0382111561399857613998613939565b5060051b60200190565b600082601f8301126139b357600080fd5b813560206139c86139c38361397f565b61394f565b82815260059290921b840181019181810190868411156139e757600080fd5b8286015b84811015613a0b5780356139fe81613572565b83529183019183016139eb565b509695505050505050565b60008060408385031215613a2957600080fd5b82356001600160401b0380821115613a4057600080fd5b818501915085601f830112613a5457600080fd5b81356020613a646139c38361397f565b82815260059290921b84018101918181019089841115613a8357600080fd5b948201945b83861015613aa157853582529482019490820190613a88565b96505086013592505080821115613ab757600080fd5b50613ac4858286016139a2565b9150509250929050565b600081518084526020808501945080840160005b838110156135f657815161ffff1687529582019590820190600101613ae2565b604081526000613b1560408301856135bd565b82810360208401526132598185613ace565b606081526000613b3a60608301866135bd565b8281036020840152613b4c8186613ace565b91505061ffff83166040830152949350505050565b60008060408385031215613b7457600080fd5b8235613b7f81613572565b9150602083013561374481613572565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613bcd57613bcd613ba5565b5060010190565b6020808252601d908201527f7265776172642065706f6368206964206e6f7420737570706f72746564000000604082015260600190565b6000815480845260208085019450836000528060002060005b838110156135f65781546001600160a01b031687529582019560019182019101613c24565b604081526000613c5c6040830185613c0b565b90508260208301529392505050565b60006020808385031215613c7e57600080fd5b82516001600160401b03811115613c9457600080fd5b8301601f81018513613ca557600080fd5b8051613cb36139c38261397f565b81815260059190911b82018301908381019087831115613cd257600080fd5b928401925b82841015613cf9578351613cea81613572565b82529284019290840190613cd7565b979650505050505050565b6020808252601490820152731d9bdd195c881b9bdd081c9959da5cdd195c995960621b604082015260600190565b600082601f830112613d4357600080fd5b81516020613d536139c38361397f565b82815260059290921b84018101918181019086841115613d7257600080fd5b8286015b84811015613a0b5780518352918301918301613d76565b60008060408385031215613da057600080fd5b82516001600160401b0380821115613db757600080fd5b613dc386838701613d32565b93506020850151915080821115613dd957600080fd5b50613ac485828601613d32565b600060208284031215613df857600080fd5b81516119bf81613572565b80820281158282048414176109ee576109ee613ba5565b600082613e3757634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613e4f57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052600160045260246000fd5b600181811c90821680613e8a57607f821691505b602082108103613eaa57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251613ec2818460208701613779565b9190910192915050565b600060208284031215613ede57600080fd5b813560ff811681146119bf57600080fd5b600060208284031215613f0157600080fd5b81516001600160401b03811681146119bf57600080fd5b604081526000613f2b6040830185613c0b565b90506001600160401b03831660208301529392505050565b60006020808385031215613f5657600080fd5b82516001600160401b0380821115613f6d57600080fd5b818501915085601f830112613f8157600080fd5b8151613f8f6139c38261397f565b818152600591821b8401850191858201919089841115613fae57600080fd5b8686015b8481101561404657805186811115613fca5760008081fd5b8701603f81018c13613fdc5760008081fd5b888101516040613fee6139c38361397f565b82815291851b83018101918b8101908f84111561400b5760008081fd5b938201935b838510156140355784519250614025836136ec565b828252938c0193908c0190614010565b885250505093880193508701613fb2565b50909998505050505050505050565b60006020828403121561406757600080fd5b815162ffffff811681146119bf57600080fd5b808201808211156109ee576109ee613ba5565b604081526000613c5c60408301856135bd565b61ffff8181168382160190808211156140bb576140bb613ba5565b5092915050565b6000602082840312156140d457600080fd5b81516119bf81613547565b6000602082840312156140f157600080fd5b815161ffff811681146119bf57600080fd5b60006020828403121561411557600080fd5b5051919050565b601f8211156107ea57600081815260208120601f850160051c810160208610156141435750805b601f850160051c820191505b818110156141625782815560010161414f565b505050505050565b81516001600160401b0381111561418357614183613939565b614197816141918454613e76565b8461411c565b602080601f8311600181146141cc57600084156141b45750858301515b600019600386901b1c1916600185901b178555614162565b600085815260208120601f198616915b828110156141fb578886015182559484019460019091019084016141dc565b50858210156142195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b62ffffff8181168382160190808211156140bb576140bb613ba5565b60006060828403121561429d57600080fd5b604051606081018181106001600160401b03821117156142bf576142bf613939565b60405282516142cd81613572565b815260208301516142dd81613572565b602082015260408301516142f081613572565b60408201529392505050565b6000806040838503121561430f57600080fd5b82519150602083015161374481613547565b6020815260006119bf602083018461379d565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200760044682c80809f36dc85732a8a123a48e7d0dca7b27ba5bd0cd21207c840664736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/libs/ftso-core/src/configs/networks.ts b/libs/ftso-core/src/configs/networks.ts index 214e369c..11ef0959 100644 --- a/libs/ftso-core/src/configs/networks.ts +++ b/libs/ftso-core/src/configs/networks.ts @@ -35,17 +35,17 @@ const COSTON_CONFIG: NetworkContractAddresses = { }; const COSTON2_CONFIG: NetworkContractAddresses = { - FlareSystemsManager: { name: "FlareSystemsManager", address: "0xbC1F76CEB521Eb5484b8943B5462D08ea96617A1" }, - FtsoRewardOffersManager: { name: "FtsoRewardOffersManager", address: "0xd7107a7Ddb6ff24ff76ecFF2E06b9c4a3D8DCb88" }, - RewardManager: { name: "RewardManager", address: "0x2F10597B3c9Fd42031cb18818eF2Ab88b18Ceff8" }, + FlareSystemsManager: { name: "FlareSystemsManager", address: "0xA90Db6D10F856799b10ef2A77EBCbF460aC71e52" }, + FtsoRewardOffersManager: { name: "FtsoRewardOffersManager", address: "0x1b7ffab226b66b5eCBdC79a42287BC09C05bCb33" }, + RewardManager: { name: "RewardManager", address: "0x7A0bFB85387314d7F8C0FcCD9D9B74A76115c322" }, Submission: { name: "Submission", address: "0x2cA6571Daa15ce734Bbd0Bf27D5C9D16787fc33f" }, - Relay: { name: "Relay", address: "0x5CdF9eAF3EB8b44fB696984a1420B56A7575D250" }, - FlareSystemsCalculator: { name: "FlareSystemsCalculator", address: "0x9D7207b1410De031523356882637dd01F460E958" }, - VoterRegistry: { name: "VoterRegistry", address: "0x3BFdbe79BEf39Bae3F85636f525AcD3051Df4f64" }, + Relay: { name: "Relay", address: "0x4087D4B5E009Af9FF41db910205439F82C3dc63c" }, + FlareSystemsCalculator: { name: "FlareSystemsCalculator", address: "0x9aF60c16192330EC98d04Ec9675d22dBb9892951" }, + VoterRegistry: { name: "VoterRegistry", address: "0xc6E40401395DCc648bC4bBb38fE4552423cD9BAC" }, FtsoMerkleStructs: { name: "FtsoMerkleStructs", address: "" }, ProtocolMerkleStructs: { name: "ProtocolMerkleStructs", address: "" }, - FastUpdater: { name: "FastUpdater", address: "" }, - FastUpdateIncentiveManager: { name: "FastUpdateIncentiveManager", address: "" }, + FastUpdater: { name: "FastUpdater", address: "0x0B162CA3acf3482d3357972e12d794434085D839" }, + FastUpdateIncentiveManager: { name: "FastUpdateIncentiveManager", address: "0xC71C1C6E6FB31eF6D948B2C074fA0d38a07D4f68" }, }; const SONGBIRD_CONFIG: NetworkContractAddresses = { @@ -298,7 +298,7 @@ const initialRewardEpochId = () => { case "coston": return 2466; case "coston2": - return 2654; + return 3110; case "songbird": return 183; case "local-test":